当前位置: 首页 > news >正文

做saas平台网站html5教程视频教程

做saas平台网站,html5教程视频教程,wordpress查看,百度关键词快速优化概念 所谓数据发生器,最典型的就是 Oracle 的 sequence,用户通过 sequence.nextval 可以取得一组连续的值。 但是,一般实现里,sequence.nextval 是依赖于单线程生成,无法做到并发。 一个优秀的分布式顺序数据发生器…

概念

所谓数据发生器,最典型的就是 Oracle 的 sequence,用户通过 sequence.nextval 可以取得一组连续的值。

但是,一般实现里,sequence.nextval 是依赖于单线程生成,无法做到并发。

一个优秀的分布式顺序数据发生器,需要满足三个条件:

  1. 分布式生成
  2. 有序
  3. 稠密

算法

本文探讨一种实现方法,它由“分布式行生成器” 和“分布式序列生成函数” 两部分组成。同时,为了支持分布式生成,需要引入 worker id 的概念,取值从 0 到 N - 1,N为并发度。提供给用户的接口为:

select nextval() from table(generator(100));

其中,table(generator(100)) 为分布式行生成器,nextval() 为分布式序列生成函数。
为了实现分布式的行生成,则需要:

  • 规划好 N 个线程里,每个 table(generator(100)) 实例能生成多少个数字。
  • 规划好 N 个线程里,nextval() 实例能生成哪些数字

先看最简单的场景,N=10, Rows=100,我们有两种生成策略。

策略1:

Worker IdRowsValues
0100,1,2,3…,9
11010,11,12,…,19
91090,91,92,…,99

策略2:

Worker IdRowsValues
0100,10,20,30…,90
1101,11,21,…,91
9109,19,29,…,99

稍微复杂一点的场景:N=10, Rows=103,就会给我带来一些疑问:

  • table(generator(100)) 实例的行数生成算法是什么?
  • nextval() 实例的数字生成公式是什么?

下面给出一个算法:

rows = worker_id * (Rows / N) + (worker_id < Rows % N ? 1 : 0)
initialize nextval.next = worker_id;
nextval.next = nextval.next + N;

基于这个算法,的到的数据表格为:

Worker IdRowsValues
0110,10,20,30…,90,100
1111,11,21,…,91,101
2112,12,22,…,92,102
3103,13,23,…,93
4104,41,21,…,91
9109,19,29,…,99

再给一个算法,剩余的数字由最后一个线程生成:

rows = worker_id * (Rows / N) + (worker_id == N -1 ? Rows % N : 0)
initialize nextval.next = worker_id * N;
nextval.next = nextval.next + 1;
Worker IdRowsValues
0100,1,2,3…,9
11010,11,12,…,19
91390,91,92,…,99,100,101,102

考虑到 N 一般不大,两种算法看上去都还行。

但考虑到更少 corner case 的话,第一种算法的倾斜更少,更为推荐。第二种算法,一个典型的 corner case 就是:N = 10, total_rows = 9 的时候,所有行都是由最后一个线程(worker id = 9)生成。如果这是一个比较底层的驱动表,可能会导致后继非常严重的 skew。

结论

分布式顺序数据发生器算法如下

rows = worker_id * (Rows / N) + (worker_id < Rows % N ? 1 : 0)
initialize nextval.next = worker_id;
nextval.next = nextval.next + N;

值得注意的是,nextval() 函数此时是一个有状态函数,它需要记住上一次的 nextval 值。

基于这个算法,每个线程要生成多少数字,生成什么数字,都是预先约定的,无需线程之间的通信,是一种高效的无锁并行算法。

http://www.15wanjia.com/news/163486.html

相关文章:

  • 想做网站360网站图标怎么做
  • 2015百度竞价单页面网站模板源码设计广告投放软件
  • wordpress图片上传大小东莞市seo网络推广服务机构
  • 专业网站设计建设服务wordpress版权修改文件
  • 网站申请微信登录免费空间说说点赞
  • 世纪佳缘网站开发公司婚介 东莞网站建设
  • 网站设计需要哪些技术深圳住房与建设局官网
  • 建设网站后怎么发布淘宝软件营销网站建设
  • 网站下面的站长统计很逗手机网站建设推荐
  • 帮传销做网站做网站项目计划书
  • 制作企业网站的版式wordpress 响应式产品展示站
  • 织梦手机网站有广告位域名备案信息查询官网
  • 廊坊网站制作建在线教育网站需要多少钱
  • 上海一家做服饰包鞋穿上用品的网站云南省网站建设收费调查报告论文
  • 宁波优化网站排名软件做音乐的网站
  • 微网站制作网站开发现在网络推广哪家好
  • 标书制作教程视频网站wordpress twilight saga 主题
  • 建设网站的市场环境怎么样网创是什么
  • 昆明网站建设云集创怎么做系部网站首页
  • 有哪些做公司网站的南通专业网站排名推广
  • 阿里云做网站需要些什么模板网站和插件
  • 网站建设费要摊销网络工程就业方向及就业前景
  • 上海免费推广网站有哪些阿里巴巴网站建设基础服务
  • 河北华宇建设集团有限公司网站wordpress恢复备份数据库
  • 深圳勘察设计协会新乡优化
  • 成都网站系统开发电商设计包括什么
  • 门户网站开发难点wordpress 下载按钮插件
  • 深圳建网站的公司朗润装饰成都装修公司官网
  • 模板建站和定制建站室内设计师联盟app
  • 多作者wordpress插件专业网站优化公司排名