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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

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

seq

分布式架構(gòu)下,唯一序列號生成是我們在設(shè)計一個系統(tǒng),尤其是數(shù)據(jù)庫使用分庫分表的時候常常會遇見的問題。當(dāng)分成若干個sharding表后,如何能夠快速拿到一個唯一序列號,是經(jīng)常遇到的問題。

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

特性

分布式:可任意橫向擴(kuò)展

高性能:分配ID只能訪問內(nèi)存

易用性:對外提供HTTP服務(wù)

唯一性:MySQL自增ID,永不重復(fù)

高可靠:MySQL持久化

依賴項

本項目使用下列優(yōu)秀的項目作為必要組件。

gopkg.in/yaml.v2

github.com/go-sql-driver/mysql

github.com/satori/go.uuid

安裝

注意:需要在啟動之前創(chuàng)建數(shù)據(jù)庫并修改配置文件中數(shù)據(jù)庫的配置。

單獨編譯:

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

cd seq

go build .

./seq

Docker 方式:

Dockerfile 使用了 Docker 多階段構(gòu)建功能,需保證 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

初始化數(shù)據(jù)庫

數(shù)據(jù)庫名稱可以自定義,修改config.yml即可。

然后導(dǎo)入下面的SQL生成數(shù)據(jù)表。

create database seq;

CREATE TABLE `seq_number` (

`id` bigint unsigned NOT NULL AUTO_INCREMENT,

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

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

原理

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

后續(xù)的請求,都會在內(nèi)存中進(jìn)行自增返回,并且保證返回的 ID 不會超過設(shè)置的上限,到達(dá)上限后會再次從 MySQL 中更新數(shù)據(jù),返回新的初始 ID 。

參考

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

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

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

核心SQL

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

TODO

高可用(在ab測試中,發(fā)現(xiàn)存在請求被hang住的情況,響應(yīng)時間不是太穩(wěn)定)

批量獲取

提高rpc接口

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。