我现在就在想, 数据库中万恶的锁,
其实, 目前的多线程编程新技术已经可以把内存数据库中的锁彻底抛弃了,
但是市场中好像还没有一款这样的产品, 不知道是什么原因. 也许是我孤陋寡闻, 使用少吧. 如果有的话, 请告诉我.
我的理解, 无锁的内存数据库在普通4核心上并发可以轻松过百万千万, 应该瓶颈在网络层, 内存层没有锁, 就基本没有消耗, 很少的代码就可以存取到数据,
如果市场上真的没有这样的产品, 就考虑自己来做一个这样的产品吧, 网络层的代码调优完毕, 我就开始做无锁的内存数据库.
只要实现了无锁的内存数据库, 那么内存数据库的并发量就会随着CPU内核的增加而线性增加,
现在的技术路线上有好多种办法, 我自己知道至少2种, 都可以实现无锁.
初步计划, 我先做初步代码测试2个最简单的技术路线,
1是内存分区, 然后按核分配内存, 每个核管理自己的区域, 无冲突, 但是有可能单核心的压力过大, 不平衡. 然后就是每个核心有一个队列, 这个队列是lock_free的, 这个技术路线, 是最简单的技术路线, 用软件让数据对核心固定下来, cache也比较固定, 说白了, 这个技术路线是内核操作无阻塞,单线程, 外围解决冲突的问题.
外围使用lock-free解决问题. 技术瓶颈在lock-free
2是读写冲突校验法, 利用Intel的SSE指令实现, 理论上可以达到内存带宽, 无瓶颈. 可以保证, 在任何情况下, 无论多少个并发读写同一片内存区域, 至少有一个线程可以成功, 无锁无阻塞无冲突, 全部内存任意存取, 任意访问, 很随意. 技术瓶颈在SSE.
二种技术路线, 技术上都不复杂, 代码也没有多少, 初步估计, 大约静下心来, 做一个简单的数据库核心,
我准备明天开始先做测试代码, 对技术路线进行性能分析评估, 然后根据测试报告评估来做最后的产品,
想一想无锁的数据库, 是多么的美好啊. 想一想都觉得自己以前怎么就没有用过这样的无锁的数据库 产品呢?????
无锁的世界是多么的美好.
呵呵呵呵呵呵.
大家如果有无锁内存数据库的新技术路线, 也可以在这个帖子中一起讨论一下, 谢谢.
毕竟我从来没有接触过这样的产品, 我是第一次做. |