温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MongoDB中怎么利用Springboot实现分布式ID

发布时间:2021-08-09 16:42:10 来源:亿速云 阅读:97 作者:Leah 栏目:编程语言

本篇文章为大家展示了MongoDB中怎么利用Springboot实现分布式ID,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

MongoDB的ObjectId设计成轻量型的,不同的机器都能用全局唯一的同种方法方便地生成它。MongoDB 从一开始就设计用来作为分布式数据库,处理多个节点是一个核心要求。使其在分片环境中要容易生成得多。

它的格式:

前4 个字节是从标准纪元开始的时间戳,单位为秒。时间戳,与随后的5 个字节组合起来,提供了秒级别的唯一性。由于时间戳在前,这意味着ObjectId 大致会按照插入的顺序排列。这对于某些方面很有用,如将其作为索引提高效率。这4 个字节也隐含了文档创建的时间。绝大多数客户端类库都会公开一个方法从ObjectId 获取这个信息。

接下来的3 字节是所在主机的唯一标识符。通常是机器主机名的散列值。这样就可以确保不同主机生成不同的ObjectId,不产生冲突。

为了确保在同一台机器上并发的多个进程产生的ObjectId 是唯一的,接下来的两字节来自产生ObjectId 的进程标识符(PID)。

前9 字节保证了同一秒钟不同机器不同进程产生的ObjectId 是唯一的。

后3 字节就是一个自动增加的计数器,确保相同进程同一秒产生的ObjectId 也是不一样的。同一秒钟最多允许每个进程拥有2563(16 777 216)个不同的ObjectId。

三、编码

在springboot中引入mongodb:

<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-test</artifactId>  <scope>test</scope> </dependency> <!-- 开启web--> <dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-web</artifactId> </dependency>     <!--mongodb --> <dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>

创建一个实体类:

public class Customer {  @Id  public String id;  public String firstName;  public String lastName;  public Customer() {}  public Customer(String firstName, String lastName) {    this.firstName = firstName;    this.lastName = lastName;  }  @Override  public String toString() {    return String.format(        "Customer[id=%s, firstName='%s', lastName='%s']",        id, firstName, lastName);  }  public String getId() {    return id;  }  public void setId(String id) {    this.id = id;  }  public String getFirstName() {    return firstName;  }  public void setFirstName(String firstName) {    this.firstName = firstName;  }  public String getLastName() {    return lastName;  }  public void setLastName(String lastName) {    this.lastName = lastName;  }}

创建mongodb 接口类:

/** * Created by fangzhipeng on 2017/4/1. */public interface CustomerRepository extends MongoRepository<Customer, String> {  public Customer findByFirstName(String firstName);  public List<Customer> findByLastName(String lastName);}

测试类:

@Autowired  CustomerRepository customerRepository;@Testpublic void mongodbIdTest(){Customer customer=new Customer("lxdxil","dd");    customer=customerRepository.save(customer);    logger.info( "mongodbId:"+customer.getId());}

上述内容就是MongoDB中怎么利用Springboot实现分布式ID,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI