首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

分布式系统中生成全局ID总结与思考

大家都知道mysql自增id,但是不一定知道其实可以设置自增id初始以及自增步长, Flicker示例,两个mysql(ticketserver)初始分别是1和2,自增步长都是2(而不是默认...,会产生新记录,而新记录id是自增(则增步长2) Flicker解决办法通俗易懂,还是没有解决id信息过少问题,而且还是依赖单独一组服务(mysql)来生成全局id。...objectid有12个字节,包含时间信息(4字节、秒单位)、机器标识(3字节)、进程id(2字节)、计数器(3字节,初始随机)。...其中,时间位精度(秒或者毫秒)与序列位数,二者决定了单位时间内,对于同一个进程最多可产生多少唯一ObjectId,在MongoDB,那每秒就是2^24(16777216)。...那么小文件与block映射关系在哪里维护呢?要知道小文件量是很大 TFS文件名由块号和文件号通过某种对应关系组成,最大长度18字节。

1.9K80

.NETCore实现ObjectId反解

前言 在设计数据库时候,我们通常需要给业务数据表分配主键,很多时候,为了省事,我都是直接使用 GUID/UUID 方式,但是在 MonggoDB ,其内部实现了 ObjectId(以下统称为Oid...ObjectId 数据结构 首先,我们来看 Oid 数据结构设计。 ? 从上图可以看出,Oid 数据结构主要由四个部分组成,分别是:Unix时间戳、机器名称、进程编号、自增编号。...Oid 实际上是总长度12个字节24字符串,易记口诀:4323,时间4字节,机器名3字节,进程编号2字节,自增编号3字节。...2、机器名称:记录当前生产Oid设备号 3、进程编号:当前运行Oid程序编号 4、自增编号:在当前秒内,每次调用都将自动增长(已实现线程安全) 根据算法可知,当前一秒内产生最大 id 数量 2^...通过解包可以看出,上图两个红框内是一致,解包成功!

59310
您找到你想要的搜索结果了吗?
是的
没有找到

MongoDB ObjectId详解及使用ObjectId构成ObjectId获取时间根据时间构造ObjectIdQ&A

MongoDB我们经常会接触到一个自动生成字段:”_id”,类型ObjectId。 本文详解ObjectId构成和使用。...按照字节顺序,一次代表: 4字节:UNIX时间戳 3字节:表示运行MongoDB机器 2字节:表示生成此_id进程 3字节:由一个随机数开始计数器生成 ObjectId获取时间 从ObjectId...= a + new Array(17).join("0") 50c758800000000000000000// 使用24字符串构造ObjectId > b = new ObjectId(a)...17个元素正好有16个间隔,所以最终拼接起来字符串16个。 根据ObjectId按照插入时间排序 MongoDB默认在ObjectId上建立索引,是按照插入时间排序。...在有日期范围情况下,实际上可以从_id利用IXSCAN找到相应记录,而不需要根据另外一个时间字段来查询。如果时间字段正好没有索引的话,_id优势就体现出来了。

3.7K40

mongo常用字段类型

例如,JSON没有日期类型,JSON只有一种数字类型,无法区分浮点数和整数,更别说区分32和64位数字了。再者,JSON无法表示其他一些通用类型,如正则表达式或函数。...每个数据类型对应一个数字,在MongoDB可以使用$type操作符查看相应文档BSON类型 MongoDB无须声明数据类型,全自动匹配 每种BSON类型都具有整数和字符串标识符,如下表所示: Type...#"78b159" 代指随机数,这里要注意是,随机数数字可能会出现重复,不是唯一 #以上四种标识符拼凑成世界上唯一ObjectID #只要是支持MongoDB语言,都会有一个或多个方法,对ObjectID...进行转换 #可以得到以上四种信息 #注意:这个类型是不可以被JSON序列化 这是MongoDB生成类似关系型DB表主键唯一key,具体由24个bit组成: 0-8字节是unix时间戳, 9-14...4、判断某字段类型/长度 // 字段类型2(string),表示有此字段,或者用: $exists: true ,长度大于100 mongos> db.testnum01.find({calc: {

6.6K30

【翻译】MongoDB指南引言

_id字段 在MongoDB,文档需要_id字段作为主键,如果插入文档时没有指定_id字段,MongoDB会使用ObjectIds 作为默认_id默认。...binary subtype 取值范围0-7 或 128-135     字节数组长度是:0,1,2,3,4,5,6,7,8,10,12,14,16,20,24或32....最后三个字节表示以随机数开始计数。 在MongoDB,集合文档需要一个作为主键唯一_id字段,如果没有指定_id字段,MongoDB默认将ObjectId类型作为_id字段。...MongoDB 客户端应该添加一个ObjectId_id字段,使用ObjectId_id字段有如下好处: 在mongo shell,你可以使用ObjectId.getTimestamp()...OID Strict Mode mongo Shell Mode { "$oid": "" } ObjectId( "" ) 是一个24字符十六进制字符串

4.2K60

最佳实践| 一文读懂《MongoDB 使用规范及最佳实践》原理

我们本次分享大部分内容前提是小于等于 4.2 版本,主要原因在于 4.4 及其以上 MongoDB 版本其实有很多企业里面都没有使用。...key 字段,依然建议不要轻易调整 key 或 key 字段构成 ,而是建议在初始化分片 key 时候就评估好。...(可能有些不是 100% 准确) 关于 MongoDB ObjectId 在插入一个文档时如果业务没有显示指定 _id 那么 MongoDB 会为每个文档生成一个ObjectId 类型 _id...,在 2^24-1 个内都是唯一性 _id 存在意义:解决分布式场景下唯一性标志问题;复制依赖 _id 方便定位修改记录 ObjectId 用例: shell 下获取 _id 时间戳方式   _...普通唯一性索引只能在单分片中起到唯一性约束作用,跨分片无法做唯一性检查或者说实现代价太大。 如何理解 MongoDB _id 不采用严格自增 ID 方式生成?

2.3K50

JSON Patch

1.前言 可以这么说是,任何一种非强制性约束同时也没有“标杆”工具支持开发风格或协议(仅靠文档是远远不够),最终实现上都会被程序员冠上“务实”名头,而不管成型了多少个版本,与最初设计有什么区别...对于没有 Body PUT 动作,请将 Content-Length 设置 0 是 否 DELETE 用于删除资源 是 否 PATCH 用于使用部分 JSON 数据更新资源信息(在一个请求里可搭载多个动作...,op代表操作类型,from和path代表目标 json 层级路径,value代表操作。...MongoDB 客户端推荐注册单例。...笔者也写了一个获取信息接口/api/Persons,返回如下: [ { "name": "LeBron James", "oId": "5af995a5b8ea8500018d54b7

1.4K60

MongoDB 入门极简教程

数据类型 MongoDB 支持如下数据类型: String:字符串。存储数据常用数据类型。在 MongoDB ,UTF-8 编码字符串才是合法。 Integer:整型数值。用于存储数值。...记录文档修改或添加具体时间。 Object:用于内嵌文档。 Null:用于创建空。 Symbol:符号。该数据类型基本上等同于字符串类型,但不同是,它一般用于采用特殊符号类型语言。...如果数据库不存在该集合,那么 MongoDB 会创建该集合,并向其中插入文档。 在插入文档,如果我们没有指定 _id 参数,那么 MongoDB 会自动文档指定一个唯一 ID。...没有索引,MongoDB 就必须扫描集合所有文档,才能找到匹配查询语句文档。这种扫描毫无效率可言,需要处理大量数据。 索引是一种特殊数据结构,将一小块数据集保存为容易遍历形式。...default_language 字符串 对文本索引而言,用于确定停止词列表,以及词干分析器(stemmer)与断词器(tokenizer)规则。默认 english。

3.7K10

听说MongoDB你很豪横?-------------MongoDB数据库基础详解

4)物联网场景,使用MongoDB存储所有接入智能设备信息,以及设备汇报日志信息,并对这些信息进行多 维度分析。 5)视频直播,使用MongoDB存储用户信息、点赞互动信息等。...MongoDB记录是一个文档, 它是一个由字段和对(field:value) 组成数据结构。MongoDB文档类似于 JSON对象,即一个文档认为就是一个对象。...不能是空字符串(")。 . 不得含有’ (空格)、、$、1、\和h0 (空字符)。 应全部小写。 最多64字节。...#查看当前正在使用数据库命令 MongoDB默认数据库test,如果你没有选择数据库,集合将存放在test数据库。...3)插入当前日期使用new Date() 4)插入数据没有指定. _id,会自动生成主键值 5)如果某字段没,可以赋值null,或不写该字段。 执行后,如下,说明插入一个数据成功了。

1K30

JSON Patch

1.前言 可以这么说是,任何一种非强制性约束同时也没有“标杆”工具支持开发风格或协议(仅靠文档是远远不够),最终实现上都会被程序员冠上“务实”名头,而不管成型了多少个版本,与最初设计有什么区别...对于没有 Body PUT 动作,请将 Content-Length 设置 0 是 否 DELETE 用于删除资源 是 否 PATCH 用于使用部分 JSON 数据更新资源信息(在一个请求里可搭载多个动作...,op代表操作类型,from和path代表目标 json 层级路径,value代表操作。...MongoDB 客户端推荐注册单例。...笔者也写了一个获取信息接口/api/Persons,返回如下: [ { "name": "LeBron James", "oId": "5af995a5b8ea8500018d54b7

2K10

MongoDB(5)- Document 文档相关

,或者在传输过程不能占用过多带宽 为了超过最大大小限制文档,MongoDB 也提供了 GridFS(后续再讲) 文档字段顺序 默认情况下,MongoDB 在写操作后保留文档字段顺序,以下情况除外..._id 字段永远都是第一个字段 重命名字段名更新可能会导致文档字段重新排序 _id 字段 在 MongoDB ,存储在集合每个文档都需要一个唯一 _id 字段作为主键 如果新插入文档没有指定..._id 字段,那么 MongoDB 会自动它生成一个 ObjectID(上面的截图其实也能看到) 第二条同样适用通过 upsert:true 更新操作(后续再讲) 存储 _id 常用选项 使用...ObjectId 使用自然唯一标识符(如果可用),这样可以节省空间并避免额外索引 生成一个自动递增数字 在应用程序代码中生成 UUID,为了更有效地存储集合和索引UUID,将 UUID 存储...BSON BinData类型 如果满足以下条件,则 BinData 类型索引键将更有效地存储在索引: 二进制子类型0-7或128-135之间,并且 字节数组长度0、1、2、3、4、

1.4K20

MongoDB基础之BSON数据类型

已过时 未定义类型 ObjectId 7 objectId 对象id类型 Boolean 8 bool 布尔类型 Date 9 date 日期类型 Null 10 null 用于表示空或者不存在字段...集合或者列表可以表示成数组。 { “x” : [“a”, “b”, “c”]} 4、Binary data(二进制数据) 二进制数据可以由任意字节串组成。不过shell无法使用。...{ “x” : unddefined } 6、ObjectId ObjectId使用12字节存储空间,每个字节两位十六进制数字,是一个24字符串。...日期在数据是以标准纪元开水毫秒数形式存储没有与之相关时区信息。 9、Null null用于表示空或者不存在字段。...shell没有这个类型。 16、Min key(最小) BSON包括一个特殊类型,表示可能最小。shell没有这个类型。

8.9K30

MongoDB基础之BSON数据类型

已过时 未定义类型 ObjectId 7 objectId 对象id类型 Boolean 8 bool 布尔类型 Date 9 date 日期类型 Null 10 null 用于表示空或者不存在字段...集合或者列表可以表示成数组。 { “x” : [“a”, “b”, “c”]} 4、Binary data(二进制数据) 二进制数据可以由任意字节串组成。不过shell无法使用。...{ “x” : unddefined } 6、ObjectId ObjectId使用12字节存储空间,每个字节两位十六进制数字,是一个24字符串。...日期在数据是以标准纪元开水毫秒数形式存储没有与之相关时区信息。 9、Null null用于表示空或者不存在字段。...shell将数据库里符号类型转换成字符串。现在已经过时。 13、Timestamp(时间戳) BSON有一个MongoDB内部使用特殊时间戳类型,和常日期类型没有关系。

4.1K10

Spring认证中国教育管理中心-Spring Data MongoDB教程十四

18.5.9.使用文档参考 Using@DocumentReference提供了一种灵活方式来引用 MongoDB 实体。虽然目标与使用DBRefs时相同,存储表示不同。...DBRef解析具有固定结构文档,如MongoDB 参考文档中所述。 文档引用,不遵循特定格式。它们实际上可以是任何东西,单个,整个文档,基本上可以存储在 MongoDB 所有内容。...尽最大努力在内存恢复原始元素顺序。仅在使用等式表达式时才可以恢复顺序,而在使用 MongoDB 查询运算符时则无法恢复。...18.6.展开类型 解包实体用于在 Java 域模型设计对象,其属性被展平到父级 MongoDB 文档。 18.6.1.展开类型映射 考虑以下User.name用@Unwrapped....所有属性UserName都以 前缀a_。 虽然将@Field注释与@Unwrapped相同属性组合在一起没有意义,因此会导致错误。这是用于@Field任何未包装类型属性完全有效方法。

5.7K10

存储和使用流数据(BLOBs和CLOBs)

如果二进制流文件(BLOB)包含单个非打印字符$CHAR(0),则被认为是空二进制流。它相当于""空二进制流程:它存在(不是null),长度0。...无法使用指定COLLATE 定义流字段。...嵌入式SQL返回相同OID以编码%LIST形式返回。...因此,当应用到查询流字段时: 不同子句对重复流数据没有影响。 DISTINCT子句将流字段NULL记录数减少一个NULL记录。 GROUP BY子句对重复流数据没有影响。...如果VARCHAR精度小于实际流数据长度,则将返回截断VARCHAR精度。 如果VARCHAR精度大于实际流数据长度,则返回实际流数据长度。 不执行填充。

1.3K20

MongoDB使用

#2、文档不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入文档)。 #3、MongoDB区分类型和大小写。 #4、MongoDB文档不能有重复键。...#5、文档可以是多种不同数据类型,也可以是一个完整内嵌文档。文档键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。 文档键命名规范: #1、键不能含有\0 (空字符)。...如果将MongoDB一个文档比喻为关系型数据一行,那么一个集合就是相当于一张表 #1、集合存在于数据库,通常情况下为了方便管理,不同格式和类型数据应该插入到不同集合,其实集合没有固定结构...不同集合"_id"可以重复,同一集合内"_id"必须唯一 #1、ObjectId ObjectId是"_id"默认类型。...ObjectId采用12字节存储空间,是一个由24个十六进制数字组成字符串 0|1|2|3| 4|5|6| 7|8 9|10|11 时间戳 机器

3.7K40

MongoDB运维与开发(二)

NO.1 MongoDB常用数据类型 MongoDB文档类似json,我们知道,在json,最常用数据类型有null、bool、数组、字符串、数据、json对象等等。...相对比较少,比如对于时间类型数据,json是无法表示,而MongoDB对json进行了简单优化,像json,但是又不是json。...它常用数据类型有: 1、null 用于表示空或者不存在字段 {"x":null} 2、bool 这个容易理解,true or false {"x":true} 3、整数 在MongoDB自带shell...键,这个_id键你可以简单理解唯一标识,类似MySQL自增主键,但是它一般不设置成自增,因为在分布式环境,同步自动增加主键值既费时又费力,MongoDB为了保证分布式场景下性能,通过自身生成方式来产生...该类型使用12字节存储空间,每个字节里面是2位16进制数字,是一个24字符串

1.2K20
领券