- 论坛徽章:
- 9
|
本帖最后由 wlmqgzm 于 2016-05-24 17:10 编辑
回复 51# hellioncu
呵呵, 总算有人来踩踩了.
由于这个项目是学习和练手项目, 代码随意性比较强, 很多试验性质的库都拿来测试, 期望能够沿用到一些目前世界最先进水平的东西, 而不是拿十年前的技术练手.
代码 修改也比较大, 代码一直也没有稳定下来, 一直到现在, 连最底层File_Mapping层的代码, 包括接口还在不断的变, 昨天还修改了File_mapping_read实现大块数据的Zero copy, 也是在追求一种极致和最佳方案.
因此, 主要是记录思路的变化, 修改和废弃的代码, 远远超过留下来的代码, 高并发下高性能是公认的难题, 这个领域是非常困难的, 国内一直也没有类似Oracle这样牛的数据库开发公司和高手,
很多资料也缺乏, 又是个人开发, 我觉得数据库开发主要是思路问题,
类似 Leveldb, mongodb, innodb 有很多东西都值得学习, 然后, 拿里面最核心最有价值的思路, 然后学习, 实践, 最终推出一个集中全部优点的产品.
这次设计是 C++软件领域 最新技术的堆砌:
1)目前主要采用了 mongodb的 File_mapping 高性能IO读写技术.测试缓冲读性能1.6GByte/s, 缓冲写性能1.1GByte/s, 无缓冲磁盘写350MByte/s, 无缓冲磁盘读700MByte/s (已经实现)
2)采用了读写分离的存储层设计, 彻底去掉了mongodb的大锁, File_mapping读, 实现无锁并发, Zero Copy, File_mapping写, 实现单线程写, 其他线程写缓冲队列输入, 实现最高性能的Wait_free无等待并发...(已经实现)
3)采用了LevelDb 数据分层, 一次性写入, 以及 不断合并技术, 实现完全消灭随机写, 只有顺序写, 对SSD的寿命有很大提高, 也可以实现最大化的写入速度, 实现极高的插入性能....(正在写代码, 部分实现...)
4)采用了内存中只存放索引, 减少物理内存占用, 数据由Mapping缓冲, 数据部分可不用放在内存中, 利用SSD的极高随机读性能, 单机实现10亿级别以上数据量的处理.....(正在写代码, 部分实现...)
5)采用了 innodb 日志offset 作为事务进度的指标, 以及commit事务隔离的思路, 并在自己的代码中也采用类似的技术思路, 为第2个版本提供MVCC做好准备.(准备第2个版本中实现, 第1个版本预留空间和定义)
6)采用了目前世界上比较前沿, 技术难度非常大, 国内还很少实践的 Lock_free, Wait_free 高性能无锁无等待队列技术, 作为线程间通讯. (已经实现, 已经全部采用Wait_free_queue)
7)采用了完全 智能化 对象 的设计思路, 并减少代码层次, ....实现了智能化对象, , File_Mapping_write无锁空间扩展, 文件数量自动增加和大小自动扩展, 以及多个File_mapping_read对象无锁自动跟踪扩展的技术,
各种比较新的对象设计思路 (正在写代码, 部分实现....)
采用了NOSQL的字段名field_name(/field_id)下推到底(每个Row记录)的设计, 以便为今后 任意新增/删除字段, 不需要全表更新.....(部分实现, 正在写代码....)
9)采用了目前压缩和解压缩速度最快的压缩工具包LZ4, 作为存储层的压缩工具, 以便减少IO流量, 增加缓冲的效率, 进而提供更快的IO性能. 每秒解压缩性能500MByte. (已经实现)
10)采用了目前速度最快的crc32c硬件校验技术(intel SSE4.2指令), 每秒校验速度1.6GByte(已经实现)
11)采用了目前高性能网络库Boost Asio, 实现每秒单连接PingPong测试11.2万QPS, 4核CPU下PingPong测试多连接87万QPS的性能(已经实现)
..............
所以, 希望大家有什么好的新技术和新思路推荐一下, 谢谢......
|
|