亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解如何使用MongoDB+Springboot實現(xiàn)分布式ID的方法

 更新時間:2019年09月12日 10:28:19   作者:方志朋  
這篇文章主要介紹了詳解如何使用MongoDB+Springboot實現(xiàn)分布式ID的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、背景

如何實現(xiàn)分布式id,搜索相關(guān)的資料,一般會給出這幾種方案:

  • 使用數(shù)據(jù)庫自增Id
  • 使用reids的incr命令
  • 使用UUID
  • Twitter的snowflake算法
  • 利用zookeeper生成唯一ID
  • MongoDB的ObjectId

另外,在我通過爬取知乎用戶id發(fā)現(xiàn),知乎的用戶id是32位的,初步斷定知乎采用的是md5加密,然后全部轉(zhuǎn)換成小寫。至于如何爬取知乎用戶信息,見我之前分享的文章。本文采取的技術(shù)方案采取的是mogoodb的objectId。

二.mongodb如何實現(xiàn)分布式ID

MongoDB的ObjectId設(shè)計成輕量型的,不同的機器都能用全局唯一的同種方法方便地生成它。MongoDB 從一開始就設(shè)計用來作為分布式數(shù)據(jù)庫,處理多個節(jié)點是一個核心要求。使其在分片環(huán)境中要容易生成得多。

它的格式:

前4 個字節(jié)是從標(biāo)準(zhǔn)紀元開始的時間戳,單位為秒。時間戳,與隨后的5 個字節(jié)組合起來,提供了秒級別的唯一性。由于時間戳在前,這意味著ObjectId 大致會按照插入的順序排列。這對于某些方面很有用,如將其作為索引提高效率。這4 個字節(jié)也隱含了文檔創(chuàng)建的時間。絕大多數(shù)客戶端類庫都會公開一個方法從ObjectId 獲取這個信息。

接下來的3 字節(jié)是所在主機的唯一標(biāo)識符。通常是機器主機名的散列值。這樣就可以確保不同主機生成不同的ObjectId,不產(chǎn)生沖突。

為了確保在同一臺機器上并發(fā)的多個進程產(chǎn)生的ObjectId 是唯一的,接下來的兩字節(jié)來自產(chǎn)生ObjectId 的進程標(biāo)識符(PID)。

前9 字節(jié)保證了同一秒鐘不同機器不同進程產(chǎn)生的ObjectId 是唯一的。

后3 字節(jié)就是一個自動增加的計數(shù)器,確保相同進程同一秒產(chǎn)生的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>

創(chuàng)建一個實體類:

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;
  }
}

創(chuàng)建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;


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

四、參考資料

Accessing Data with MongoDB

MongoDB深究之ObjectId

MongoDB 教程

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java下http下載文件客戶端和上傳文件客戶端實例代碼

    Java下http下載文件客戶端和上傳文件客戶端實例代碼

    這篇文章主要介紹了Java下http下載文件客戶端和上傳文件客戶端實例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-12-12
  • Java中的static關(guān)鍵字你了解多少

    Java中的static關(guān)鍵字你了解多少

    這篇文章主要為大家詳細介紹了Java中的static關(guān)鍵字,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Mybatis 動態(tài)SQL搭建環(huán)境的全過程

    Mybatis 動態(tài)SQL搭建環(huán)境的全過程

    這篇文章主要給大家介紹了關(guān)于Mybatis動態(tài)SQL搭建環(huán)境的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • SpringAMQP消息隊列(SpringBoot集成RabbitMQ方式)

    SpringAMQP消息隊列(SpringBoot集成RabbitMQ方式)

    這篇文章主要介紹了SpringAMQP消息隊列(SpringBoot集成RabbitMQ方式),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 使用Logback設(shè)置property參數(shù)方式

    使用Logback設(shè)置property參數(shù)方式

    這篇文章主要介紹了使用Logback設(shè)置property參數(shù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 二叉樹遞歸迭代及morris層序前中后序遍歷詳解

    二叉樹遞歸迭代及morris層序前中后序遍歷詳解

    這篇文章主要為大家介紹了二叉樹遞歸迭代詳解及二叉樹的morris遍歷、層序遍歷、前序遍歷、中序遍歷、后序遍歷示例分析,有需要的朋友可以借鑒參考下
    2021-11-11
  • SpringBoot的Security和OAuth2的使用示例小結(jié)

    SpringBoot的Security和OAuth2的使用示例小結(jié)

    這篇文章主要介紹了SpringBoot的Security和OAuth2的使用,本文通過示例圖文相結(jié)合給大家講解的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • idea全局搜索快捷鍵超詳細總結(jié)(推薦!)

    idea全局搜索快捷鍵超詳細總結(jié)(推薦!)

    在實際開發(fā)中項目會非常多,如何在項目中快速定位,你說需要找到的類或方法,可以利用idea的全局搜索功能,下面這篇文章主要給大家分享介紹了關(guān)于idea全局搜索快捷鍵超詳細總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • java selenium教程之selenium詳細介紹

    java selenium教程之selenium詳細介紹

    本文主要介紹Java selenium,這里整理了selenium的一些基本資料,此軟件主要用于Web UI自動測試框架,有興趣的同學(xué)可以看一下
    2016-08-08
  • Java的反射機制之獲取class詳解

    Java的反射機制之獲取class詳解

    這篇文章主要介紹了Java的反射機制之獲取class詳解,Class類表示一個類或接口的元數(shù)據(jù),通過它可以獲取到類或接口的構(gòu)造函數(shù)、方法、字段、注解等信息,也能夠創(chuàng)建對象、調(diào)用方法等,需要的朋友可以參考下
    2023-09-09

最新評論