现在有哪些比较好的轻量级的开源数据库Prototype?
7 个回答
这个问题加了“论文写作“的标注,所以我估计题主可能主要是写paper跑实验以验证自己的idea。
我对postgres的代码也有所了解,早期的数据库研究工作的确是有直接改postgres代码然后跑实验的。不过这种做法十分麻烦,需要花几个月时间来了解postgres的代码。而且postgres很大程度上是基于hard disk做优化的,对于现在的数据库research来说已经不是很适用了。
我的经验是并没有任何一个prototype能够让你测试任何想法的。几乎所有prototype都是为了测试某个component来进行优化。所以题主必须考虑清楚自己想要着重测试数据库的哪一块,是OLTP还是OLAP还是HTAP?
如果想测试concurrency control/logging recovery的话,可以参考下面两个工作:
yxymit/DBx1000 MIT phd xiangyao 针对transaction processing workload写的prototype
Cavalia/Cavalia 我在phd阶段的工作,与xiangyao做的类似,不过实现了更多的cc protocol,支持concurrent index。
Silo (stephentu/silo) 也是一个很好的prototype,如果希望测试transaction性能的话可以考虑用Silo。
如果想测试distributed transaction的话,可以参考:
mitdbg/deneva 基于xiangyao的dbx1000做的distributed database prototype
如果想测试OLAP query的话,其实最重要的是join,除了其他答主提到的eth的implementation之外也可以参考一下OSU的spyros的implementation:http://web.cse.ohio-state.edu/~blanas.2/files/multijoin.tar.bz2 其实两个差不多。。。
其实测试OLAP的时候很多人也用monetdb MonetDB/MonetDB,毕竟性能挺好的,就是代码有点乱。。。
对于key value store的话,大家都用rocksdb或者leveldb,地址我就不列了。leveldb代码简单点所以更容易改。
对于数据库整体的测试,早期的有shore-mt(Home Page of SHORE-MT),不过可能过于早期了比较难做实验。
写了这么多,是时候推荐一下cmu的peloton(cmu-db/peloton)了:-) 我目前是这个项目的top 2 committer,对于这个项目是相当熟悉了,你可以在上面测试各种component。目前已经有不少paper的实验都是基于peloton做的了。 当然我必须提醒一下的是,相比于之前的一些prototype,peloton还是比较heavy的,所以可能并不会那么容易的跑出自己想要的性能:-)
以上即为我所知或者所用的一些prototype,题主当然也可以考虑直接自己重写一个prototype,从实现方面来说更容易自己控制,当然工程量也许会比较大,主要取决于你想测哪个部分了。
当然了,我想强调的一点是在任何这些prototype上跑出性能并不代表你能在真实数据库(比如mysql Postgres)上得到同样的性能,毕竟仔细研究一下这些真实数据库你会发现很多时候性能的瓶颈都在一些比较难以修改的方面(比如jdbc)。在research lab混迹了一段时间之后,我更发现真实数据库有太多细枝末节需要讨论,学术圈使用的各种assumption在这些数据库中基本都不能采用,因此要改工业级的数据库的话还是老老实实看mysql postgres好了。。
最后祝楼主找到自己合适的prototype :-)
之前看过CMU Andy Pavlo的一篇blog,你这个问题就是他考虑的一个方面。
直接看原文吧(不过里边也不会告诉你选啥好 ):
Building a New Database Management System in Academia
我的个人经验是:
做研究的话,Postgres(Mysql情况我不了解)已经算是比较好的一个AP原型选择,理由:
- 代码质量/可读性
- PG的Roadmap中有大量AP相关的规划,并且可以到mailing list中随时讨论(设计的太挫不一定有人理你就是 )
- 实现上采用Extension