免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4600 | 回复: 21

[算法] 无锁( mutex)内存数据库的技术路线讨论贴, 准备测试评估一下 [复制链接]

论坛徽章:
9
程序设计版块每日发帖之星
日期:2015-10-18 06:20:00程序设计版块每日发帖之星
日期:2015-11-01 06:20:00程序设计版块每日发帖之星
日期:2015-11-02 06:20:00每日论坛发贴之星
日期:2015-11-02 06:20:00程序设计版块每日发帖之星
日期:2015-11-03 06:20:00程序设计版块每日发帖之星
日期:2015-11-04 06:20:00程序设计版块每日发帖之星
日期:2015-11-06 06:20:00数据库技术版块每周发帖之星
日期:2015-12-02 15:02:47数据库技术版块每日发帖之星
日期:2015-12-08 06:20:00
发表于 2015-10-29 23:23 |显示全部楼层
我现在就在想, 数据库中万恶的锁,

其实, 目前的多线程编程新技术已经可以把内存数据库中的锁彻底抛弃了,

但是市场中好像还没有一款这样的产品, 不知道是什么原因. 也许是我孤陋寡闻, 使用少吧.  如果有的话, 请告诉我.  

我的理解, 无锁的内存数据库在普通4核心上并发可以轻松过百万千万, 应该瓶颈在网络层, 内存层没有锁, 就基本没有消耗, 很少的代码就可以存取到数据,

如果市场上真的没有这样的产品, 就考虑自己来做一个这样的产品吧, 网络层的代码调优完毕, 我就开始做无锁的内存数据库.   

只要实现了无锁的内存数据库, 那么内存数据库的并发量就会随着CPU内核的增加而线性增加,

现在的技术路线上有好多种办法,  我自己知道至少2种, 都可以实现无锁.

初步计划, 我先做初步代码测试2个最简单的技术路线,

1是内存分区, 然后按核分配内存, 每个核管理自己的区域, 无冲突, 但是有可能单核心的压力过大, 不平衡.  然后就是每个核心有一个队列, 这个队列是lock_free的, 这个技术路线, 是最简单的技术路线, 用软件让数据对核心固定下来, cache也比较固定, 说白了, 这个技术路线是内核操作无阻塞,单线程, 外围解决冲突的问题.
外围使用lock-free解决问题.  技术瓶颈在lock-free

2是读写冲突校验法, 利用Intel的SSE指令实现,  理论上可以达到内存带宽, 无瓶颈. 可以保证, 在任何情况下, 无论多少个并发读写同一片内存区域, 至少有一个线程可以成功, 无锁无阻塞无冲突, 全部内存任意存取, 任意访问, 很随意.  技术瓶颈在SSE.

二种技术路线, 技术上都不复杂, 代码也没有多少, 初步估计, 大约静下心来, 做一个简单的数据库核心,  

我准备明天开始先做测试代码, 对技术路线进行性能分析评估,   然后根据测试报告评估来做最后的产品,  

想一想无锁的数据库, 是多么的美好啊.  想一想都觉得自己以前怎么就没有用过这样的无锁的数据库 产品呢?????

无锁的世界是多么的美好.

呵呵呵呵呵呵.   

大家如果有无锁内存数据库的新技术路线, 也可以在这个帖子中一起讨论一下, 谢谢.  

毕竟我从来没有接触过这样的产品, 我是第一次做.

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
发表于 2015-10-30 00:48 |显示全部楼层
你可以先试试实现一个lock free hash table,然后再来评估整个项目是否值得花太多功夫。

事先提醒你,着玩意儿的麻烦程度很可能超出你的预期。

PS: https://github.com/windoze/Argos ... common/hash_table.h 这个hash_table凑合着可以当lock free hash table用,虽然我知道里面有一些问题。

论坛徽章:
313
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
发表于 2015-10-30 10:25 |显示全部楼层
信心爆棚的结果

论坛徽章:
9
程序设计版块每日发帖之星
日期:2015-10-18 06:20:00程序设计版块每日发帖之星
日期:2015-11-01 06:20:00程序设计版块每日发帖之星
日期:2015-11-02 06:20:00每日论坛发贴之星
日期:2015-11-02 06:20:00程序设计版块每日发帖之星
日期:2015-11-03 06:20:00程序设计版块每日发帖之星
日期:2015-11-04 06:20:00程序设计版块每日发帖之星
日期:2015-11-06 06:20:00数据库技术版块每周发帖之星
日期:2015-12-02 15:02:47数据库技术版块每日发帖之星
日期:2015-12-08 06:20:00
发表于 2015-10-30 10:53 |显示全部楼层
回复 3# hellioncu

好吧, 我一个无业游民, 只能做点代码, 反正时间大把, 刚好自己做试验, 做代码, 没有任何成本, 没有上级领导, 放手自由去做一些自己过去想都不敢想, 连公司也都不可能去做的事情.

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
发表于 2015-10-30 13:01 |显示全部楼层
本帖最后由 yulihua49 于 2015-10-30 13:14 编辑
wlmqgzm 发表于 2015-10-29 23:23
我现在就在想, 数据库中万恶的锁,

1是内存分区, 然后按核分配内存, 每个核管理自己的区域, 无冲突,  ...

很多场合内存数据库是要各线程共享的,按核独享?
本来我们的服务器是多进程的,为什么改成多线程?就是需要任务间共享同一个内存数据库。
一个线程(它可能占据任何一个核)修改了内容,其他线程立刻就可以看到。而且,一个线程正在修改时,别的线程不能修改相同的数据。怎么能无锁处理,我想不通。

所谓内存数据库,多用于存储静态数据。修改量比较少,也不频繁。尽管如此,修改操作是必然存在的,不锁,怎么玩?

论坛徽章:
9
程序设计版块每日发帖之星
日期:2015-10-18 06:20:00程序设计版块每日发帖之星
日期:2015-11-01 06:20:00程序设计版块每日发帖之星
日期:2015-11-02 06:20:00每日论坛发贴之星
日期:2015-11-02 06:20:00程序设计版块每日发帖之星
日期:2015-11-03 06:20:00程序设计版块每日发帖之星
日期:2015-11-04 06:20:00程序设计版块每日发帖之星
日期:2015-11-06 06:20:00数据库技术版块每周发帖之星
日期:2015-12-02 15:02:47数据库技术版块每日发帖之星
日期:2015-12-08 06:20:00
发表于 2015-10-30 13:05 |显示全部楼层
本帖最后由 wlmqgzm 于 2015-10-30 13:08 编辑

回复 5# yulihua49

对外是整体, 对内要分片, 就是这样,
一个数据库在内部分片成几个单线程的数据库, 就没有锁了, 几个单库并发, 就可以提高对外的整体并发度, 提高性能.

   

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
发表于 2015-10-30 13:23 |显示全部楼层
wlmqgzm 发表于 2015-10-30 13:05
回复 5# yulihua49

对外是整体, 对内要分片, 就是这样,

每个分片只有一个线程能修改?

论坛徽章:
9
程序设计版块每日发帖之星
日期:2015-10-18 06:20:00程序设计版块每日发帖之星
日期:2015-11-01 06:20:00程序设计版块每日发帖之星
日期:2015-11-02 06:20:00每日论坛发贴之星
日期:2015-11-02 06:20:00程序设计版块每日发帖之星
日期:2015-11-03 06:20:00程序设计版块每日发帖之星
日期:2015-11-04 06:20:00程序设计版块每日发帖之星
日期:2015-11-06 06:20:00数据库技术版块每周发帖之星
日期:2015-12-02 15:02:47数据库技术版块每日发帖之星
日期:2015-12-08 06:20:00
发表于 2015-10-30 13:24 |显示全部楼层
本帖最后由 wlmqgzm 于 2015-10-30 13:27 编辑

回复 7# yulihua49

对, 具体内容在我的" ASIO 无锁, 高并发,高可靠网络架构,抗DOS,无锁内存数据库, 奔腾双核CPU32.5万QPS ECHO "
里面有大量的讨论.

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
发表于 2015-10-30 15:36 |显示全部楼层
本帖最后由 yulihua49 于 2015-10-30 15:37 编辑
wlmqgzm 发表于 2015-10-30 13:24
回复 7# yulihua49

对, 具体内容在我的" ASIO 无锁, 高并发,高可靠网络架构,抗DOS,无锁内存数据库, 奔腾 ...

实际上我很难控制修改的任务交给哪个线程(核)。
任务的分派是随机的,无法控制。

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
发表于 2015-10-31 09:45 |显示全部楼层
回复 6# wlmqgzm


    数据库内部分片,单硬件是瓶颈。要想做大,还得考虑集群,而集群,直接是功能服务器与数据服务器映射就好了,“外部分片”,灵活性扩展性大得多。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP