2016 - 2024

感恩一路有你

分布式文件系统设计步骤 hadoop设计理念和核心技术?

浏览量:4566 时间:2023-06-12 20:56:42 作者:采采

hadoop设计理念和核心技术?

狭义的hadoop指的是HDFS和MapReduce。HDFS是hadoop分布式文件系统,是由多台计算机组成的集群上的组件文件系统。MapReduc

如何使用MongoDb实现分布式Id?

在传统数据库软件的开发中,各大数据库也对这一需求提供了相应的支持,比如MySQL的自增。

分布式ID的特点包括:唯一性:保证生成的ID在全网唯一;高可用性:确保ID在任何时候都能正确生成。

github上对分布式ID的描述是:分布式唯一性和时间序列。

主要方案包括

使用reids的incr命令,使用UUIDTwitter的雪花算法,使用zookeeper生成MongoDB的唯一ID。ObjectIdMongoDB被设计成轻量级的,不同的机器可以是全局唯一的。

其格式:

前4个字节是标准时代的时间戳,以秒为单位。时间戳与接下来的5个字节一起提供了第二级的唯一性。因为时间戳排在最前面,这意味着ObjectId将大致按照插入顺序排列。这在某些方面是有用的,比如用它作为索引来提高效率。这四个字节也暗示了文档创建的时间。大多数客户端类库都会公开一个方法来从ObjectId获取这些信息。

接下来的3个字节是主机的唯一标识符。通常是机器主机名的哈希值。这可以确保不同的主机生成不同的ObjectId而不会发生。为了确保同一台机器上多个并发进程生成的ObjectId是唯一的,接下来的两个字节来自生成ObjectId的进程标识符(PID)。

前9个字节确保不同机器和进程在同一秒内生成的ObjectId是唯一的。最后3个字节是自动递增的计数器,保证同一进程在同一秒生成的ObjectId也是不同的。每个进程允许同时拥有2563(16 777 216)个不同的ObjectId。

机器ID是服务器主机的标识,通常是机器主机名的哈希值。

您可以在同一台机器上运行mongod的多个实例,因此您还需要添加进程标识符PID。

前9个字节保证了同一秒内不同机器和进程生成的ObjectId的唯一性。最后三个字节是一个自动递增的计数器(一个mongod进程需要一个全局计数器),保证了同一秒的ObjectId是唯一的。每个进程最多允许有(256 ^ 3 ^ 167。77216)不同的ObjectId。

综上所述,时间戳保证以秒为单位的唯一性,机器ID保证设计分布式避免时钟同步,PID保证同一个服务器运行多个mongod实例时的唯一性,最后一个计数器保证同一秒内的唯一性(几个字节的选择既要考虑存储的经济性,又要考虑并发性能的上限)。

_id既可以在服务器端生成,也可以在客户端生成,可以减轻服务器端的压力。

主要参考:

字节 ID 机器 唯一性 时间

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。