- 浏览: 2651719 次
- 来自: 杭州
文章分类
- 全部博客 (1188)
- webwork (4)
- 网摘 (18)
- java (103)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (14)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (7)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介 -
107x:
不错,谢谢!
Python机器学习库
Posted in nosql on 三月 8th, 2011 by kafka0102 mongodb支持的数据类型中,ObjectId是其自有产物,本文对其做些简单的介绍。
存储在mongodb集合中的每个文档(document)都有一个默认的主键_id,这个主键名称是固定的,它可以是mongodb支持的任何数据类 型,默认是ObjectId。在关系数据库schema设计中,主键大多是数值型的,比如常用的int和long,并且更通常的,主键的取值由数据库自增 获得,这种主键数值的有序性有时也表明了某种逻辑。反观mongodb,它在设计之初就定位于分布式存储系统,所以它原生的不支持自增主键。而现实的世界 是,大量应用在可预见的时空里并不需要分布式的mongodb,所以网上就出现了大量的实现mongodb自增主键方法的文章。恩,我之前也干过这种事 情。
还是看看ObjectId的底细吧。ObjectId被设计成跨机器的分布式环境中全局唯一的类型,长度是12个字节。有朋友可能嘀咕了,这可比int大 了两倍,比long也多了一个int,很不经济嘛,但在现在的硬件配置中,多出的这些字节很难有理由成为系统的瓶颈所在,所以尽可能放心使用之。 ObjectId的12字节是如此构成的:0-3这4个字节是时间戳(timestamp)、4-6这3个字节是机器码(machine)、7-8两个字 节是进程id(pid)、9-11是程序自增id(increment)。可以看下java driver中ObjectId的实现代码:
public class ObjectId implements Comparable< ObjectId> , java.io .Serializable
对于ObjectId的组成,有一些值得说道的地方:
1、因为ObjectId以时间戳打头,所以它是近似有序的,使得_id的索引插入效率相比普通索引高很多。
2、ObjectId的前9个字节(timestamp+machine+pid)可以保证不同进程生成的ObjectId不会重复,而后3个字节increment又可以保证同一进程内生成的ObjectId不会重复,所以无需怀疑ObjectId的全局唯一性。
3、ObjectId存储是12个字节,但如果应用有需要以可读的方式表现它,就需要将它转成字符串,这需要24字节(每字节转成2字节的16进制表
示),这个长度的字符串看起来就有些不让人舒服了,如果是追踪某个_id引发的bug,就需要配上copy+paste的杀招。
4、初涉ObjectId的朋友很容易犯的两个错误:1)是查询时直接使用类似db.collection.find({_id:”xx”})式的代码,
结果怎么也查不到明明存在的文档,而正确的写法应该是:db.collection.find({_id:new
ObjectId(“xx”)})。2)是集合间有外键关联时,也需要将外键置为ObjectId类型,而不要直接使用上24字节的string。在写与
mongodb打交道的CRUD代码时,需要多留意ObjectId和string的转换代码。
5、ObjectId的产生既可以在应用程序端也可以在mongodb端,各种语言的driver都提供了程序端生成ObjectId的方法,不过大多数
人徒省事直接交给mongodb做了。但从mongodb的设计哲学来说,ObjectId更应该由客户端生成,毕竟应用层比存储层更容易扩展,并会提高
mongodb的插入速度。
原文:http://www.kafka0102.com/2011/03/435.html
发表评论
-
基于tmpfs使用mongoDB
2013-08-28 13:51 1639基本思想 将MongoDB ... -
mongoDB如何query is Null
2013-07-24 15:09 1216试了半天,原来通过 db.taobaoItem.find( ... -
mongoDB性能问题
2013-03-23 21:43 1004mongoDB在高并发情况下的性能存在问题。 ... -
mongoDB 性能测试
2013-03-05 13:33 2172最近对mongoDB 性能测试,200万条数据,文件大小 ... -
mongoDB为什么用virtual memory mapping
2013-01-28 23:57 1246原文: http://blog.mongodb.org/po ... -
mongoDB亿级数据量性能测试
2013-01-28 23:54 1224原文:http://www.cnblogs.co ... -
mongoDB 虚内存
2013-01-28 23:29 0http://blog.mongodb.org/post/10 ... -
MongoDB 关于索引的建议
2013-01-23 14:32 1125我们收到了很多关于索引的问题。这一部分解答了其中的一小部分。 ... -
mongoDB 索引
2013-01-23 14:12 921索引常常用来大幅度 ... -
mongos结构记录
2013-01-16 00:11 981mong client< ---> mongo ... -
mongoDB java简单记录
2013-01-11 19:02 11181. 数据格式传递 上个自己画的图 Mongodb-Jav ... -
MongoDB数据文件内部结构
2012-12-29 11:40 927有人在Quora上提问:Mongo ... -
MongoDB范围查询的索引优化
2012-12-22 15:08 1751源文: http://blog.nosqlfan. ... -
mongoDB意外关闭重启
2012-12-03 16:36 2365线上一台mongoDB意外关闭,重启的时候报错: o ... -
MongoDB vs Redis vs Tokyo Tyrant 测试对比
2012-12-01 17:19 0* MongoDB vs Redis vs Tokyo T ... -
mongoDB NUMA问题
2012-12-01 14:05 1195NUMA的含义,简单点说,在有多个物理CPU的架构下,NUMA ... -
mongo 监控常用命令
2012-12-01 14:05 963db.stats() db.serverStatus(). ... -
mongoDB的储存机制
2012-11-30 16:27 1711在MongoDB的数据文件夹中(默认路径是/data/db)由 ... -
MongoDB与内存
2012-11-29 16:07 823原文:http://huoding.com/2011/08/ ... -
mongoDB 数据备份文档
2012-11-12 14:40 873参考:http://docs.mongodb.org/manu ...
相关推荐
MongoDB ObjectId是一个重要的概念,它是MongoDB数据库中用于唯一标识文档的一个特殊数据类型。ObjectId作为一个12字节的BSON...在实际应用中,理解并合理利用ObjectId的各种特性,能够提高数据管理的效率和便利性。
在深入讨论 ObjectId 的结构和功能之前,我们需要理解 MongoDB 的基本架构,它是一个基于分布式文件存储的开源文档数据库,强调高性能、高可用性和可扩展性。 ObjectId 的结构如下: 1. **时间戳(4 个字节)**:...
在MongoDB中,每个文档都有一个默认的主键字段`_id`,其类型为ObjectId。ObjectId是一个12字节的二进制结构,通常用于唯一标识文档。在本文中,我们将深入探讨如何从ObjectId中提取时间信息。 ObjectId的结构如下:...
通过理解`ObjectId`的结构和生成机制,我们可以更有效地利用MongoDB的特性,提升数据查询的效率和便利性。在Python编程中,结合使用`pymongo`库,我们可以实现更多高级的MongoDB操作,如建立索引、执行聚合查询等,...
在Node.js环境中,当你使用MongoDB作为数据库时,经常需要处理`ObjectId`作为查询条件的情况。MongoDB在插入新文档时,会自动生成一个唯一的`ObjectId`作为文档的 `_id` 字段,这个字段通常用于唯一标识每条记录。...
MongoDB的ObjectId是一个12字节的BSON类型数据,用于唯一标识文档。它由四个部分组成,每个部分都有特定的用途,以确保全局唯一性。以下是对标题和描述中...理解这些误区有助于避免在使用MongoDB时遇到不必要的问题。
在实际操作 MongoDB 时,理解这些基本概念对于有效地插入、查询和管理数据至关重要。例如,你可以通过 ObjectId 的时间戳来大致判断文档的创建顺序,或者利用其唯一性来避免数据冲突。掌握这些知识能帮助你更好地...
这个库提供了对BSON数据类型的编码和解码功能,使得Java应用程序能够理解和处理MongoDB中的文档结构。BSON是一种轻量级的数据交换格式,类似于JSON,但支持更多数据类型,如日期、二进制数据和ObjectId等。 2. `...
从提供的文件内容中,我们可以提取出以下关于MongoDB的知识点: 1. 关于NoSQL的知识点: ...通过这些知识点,我们可以更好地理解MongoDB的设计理念、优势、特性和应用方法,以便在实际开发中做出合适的数据存储选择。
当你抱怨MongoDB集合查询效率低的时候,可能你就需要考虑使用索引了,为了方便后续介绍,先科普下MongoDB里的索引机制(同样适用于其他的数据库比如mysql)。 mongo-9552:PRIMARY> db.person.find() { "_id" : ...
MongoDB是一种流行的开源文档数据库,以其灵活性、高性能和易于扩展性而受到开发者的青睐。...通过深入研究并理解这些源码,开发者可以更好地掌握MongoDB的C#驱动程序,并将其应用到实际的项目开发中。
通过学习和理解上述知识点,你将能够有效地安装、管理和利用MongoDB作为你的数据库解决方案。资源中的"安装教程.txt"文档应能帮助你解决安装过程中遇到的具体问题,进一步提升你的MongoDB操作技能。
在Python中,MongoDB的`ObjectId`是一种用于唯一标识文档的内置类型,...总之,了解如何在Python中处理MongoDB的`ObjectId`时间戳对于数据操作和分析是非常重要的,它可以增强你对数据存储和查询的理解,提升开发效率。
为了更好地理解MongoDB中的数据库设计,我们首先来看一下具体的实体类定义。 ##### 1. Band类 ```java @Entity("bands") public class Band { @Id ObjectId id; String name; String genre; @Reference ...
MongoDB是一种流行的NoSQL数据库,以其灵活性和高性能而受到广泛欢迎。它的数据结构与传统的关系型数据库有很大区别,主要体现在以下几个方面: ...了解并熟练掌握这些基本数据结构和特性是理解和使用MongoDB的关键。
根据提供的文件信息,“MongoDB命令查询.txt”,我们可以深入探讨与MongoDB相关的命令查询知识点,特别是聚焦于`db.tablename.find...此外,深入理解这些命令的内部机制也有助于优化查询效率,提升应用程序的整体性能。
学习NoSQL的概念是理解MongoDB的一个重要部分。NoSQL数据库有多种类型,如键值存储、文档型存储、列式存储和图形数据库。每种类型的NoSQL数据库都有其特定的使用场景。NoSQL的特点包括灵活的模型、水平扩展性、容错...