日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql序列号生成软件_GitHub - spcent/seq: 基于mysql的序列号生成器

發布時間:2024/8/1 数据库 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql序列号生成软件_GitHub - spcent/seq: 基于mysql的序列号生成器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

seq

分布式架構下,唯一序列號生成是我們在設計一個系統,尤其是數據庫使用分庫分表的時候常常會遇見的問題。當分成若干個sharding表后,如何能夠快速拿到一個唯一序列號,是經常遇到的問題。

基于mysql的全局唯一序列號生成器,用go實現,同時支持worker和db模式。對于訂單號,可以選擇worker模式,對于用戶id這種,可以采用db模式。

特性

分布式:可任意橫向擴展

高性能:分配ID只能訪問內存

易用性:對外提供HTTP服務

唯一性:MySQL自增ID,永不重復

高可靠:MySQL持久化

依賴項

本項目使用下列優秀的項目作為必要組件。

gopkg.in/yaml.v2

github.com/go-sql-driver/mysql

github.com/satori/go.uuid

安裝

注意:需要在啟動之前創建數據庫并修改配置文件中數據庫的配置。

單獨編譯:

git clone https://github.com/spcent/seq.git

cd seq

go build .

./seq

Docker 方式:

Dockerfile 使用了 Docker 多階段構建功能,需保證 Docker 版本在 17.05 及以上。詳見:Use multi-stage builds

git clone https://github.com/spcent/seq.git

cd seq

docker build -t seq:latest .

docker run -p 8000:8000 seq:latest

初始化數據庫

數據庫名稱可以自定義,修改config.yml即可。

然后導入下面的SQL生成數據表。

create database seq;

CREATE TABLE `seq_number` (

`id` bigint unsigned NOT NULL AUTO_INCREMENT,

`uuid` char(36) NOT NULL COMMENT '機器識別碼',

PRIMARY KEY (`id`),

UNIQUE KEY `uniq_uuid` (`uuid`) USING BTREE

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

使用

curl http://localhost:8000/nextId

{"code":0,"msg":"ok","data":{"id":101}}

curl http://localhost:8000/nextIdSimple

102

curl http://localhost:8000/worker/1

{"code":0,"msg":"ok","data":{"id":390637407633936384}}

原理

服務初始化后第一次請求會在 MySQL 數據庫中插入一條數據,以生成初始 ID。

后續的請求,都會在內存中進行自增返回,并且保證返回的 ID 不會超過設置的上限,到達上限后會再次從 MySQL 中更新數據,返回新的初始 ID 。

參考

Tinyid(https://github.com/didi/tinyid): 是用Java開發的一款分布式id生成系統,基于數據庫號段算法實現,關于這個算法可以參考美團leaf或者tinyid原理介紹。Tinyid擴展了leaf-segment算法,支持了多db(master),同時提供了java-client(sdk)使id生成本地化,獲得了更好的性能與可用性。Tinyid在滴滴客服部門使用,均通過tinyid-client方式接入,每天生成億級別的id。

百度uid-generator(https://github.com/baidu/uid-generator): 這是基于snowflake方案實現的開源組件,借用未來時間、緩存等手段,qps可達600w+

美團leaf(https://tech.meituan.com/MT_Leaf.html): 該篇文章詳細的介紹了db號段和snowflake方案,近期也進行了Leaf開源

核心SQL

REPLACE INTO `seq_number` (uuid) VALUES ("54f5a3e2-e04c-4664-81db-d7f6a1259d01");

TODO

高可用(在ab測試中,發現存在請求被hang住的情況,響應時間不是太穩定)

批量獲取

提高rpc接口

總結

以上是生活随笔為你收集整理的mysql序列号生成软件_GitHub - spcent/seq: 基于mysql的序列号生成器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。