数据库 – 磁盘性能上的持久(纯功能)红黑树

前端之家收集整理的这篇文章主要介绍了数据库 – 磁盘性能上的持久(纯功能)红黑树前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在研究最好的数据结构来实现一个简单的开源对象临时数据库,目前我非常喜欢使用Persistent Red-Black树来实现.

我使用持久性数据结构的主要原因首先是最小化锁的使用,因此数据库可以尽可能平行.此外,实现ACID事务也将更容易,甚至能够抽象数据库以在某种集群上并行工作.
这种方法的伟大之处在于它可以实现几何免费的时间数据库.这是非常好的,特别是网络和数据分析(例如趋势).

所有这一切非常酷,但我对使用磁盘上持久数据结构的整体性能有点怀疑.即使今天有一些非常快的磁盘,并且所有写入都可以异步完成,所以响应始终是立即的,我不想在一个假的前提下构建所有应用程序,只是为了实现它不是一个很好的做到这一点

这是我的思路:
– 由于所有写入异步完成,并且使用持久性数据结构将不会使先前和当前有效的结构无效,因此写入时间并不是瓶颈.
– 有一些关于结构如this的文献,正是用于磁盘使用.但是在我看来,这些技术将增加更多的读取开销来实现更快的写入.但我认为恰恰相反是最好的.此外,许多这些技术最终都是多版本的树,但是它们并不是绝对不可变的,这对于持续的开销是合理的.
– 我知道当数据库附加值时,仍然会有某种锁定,我也知道如果不是所有的版本都要维护,应该有一个很好的垃圾回收逻辑(否则文件大小肯定会急剧上升) .也可以考虑增量压缩系统.
– 在所有搜索树结构中,我真的认为红黑最接近我需要的,因为它们提供的旋转次数最少.

但是一路上有一些可能的陷阱:
– 异步写入 – 可以影响需要实时数据的应用程序.但是,大多数情况下,我不认为Web应用程序是这样.此外,当需要实时数据时,可以设计出另一种解决方案,例如需要以更实时的方式工作的特定数据的检入/签出系统.
– 也可能导致一些冲突,尽管我没有想到可能发生的一个很好的例子.在正常的RDBMS中也可能发生提交冲突,如果两个线程正在使用相同的数据,对吗?
– 拥有这样一个不可变的界面的开销会呈指数级增长,一切都注定要尽快失败,所以这一切都是一个坏主意.

有什么想法吗?

谢谢!

编辑:
对于持久的数据结构似乎有误解:
http://en.wikipedia.org/wiki/Persistent_data_structure

解决方法

如果您发现写入时间遇到瓶颈,或者如果没有同步写入(嗯…),您的耐用性保证是无意义的,您应该做大多数其他数据库的工作:实现 Write-Ahead Log(WAL)或重做日志.

磁盘实际上很顺利地编写,至少这是他们最好的.这是一个非常慢的随机写入(如树中的那些).即使闪存驱动器从磁盘中击败随机写入,在顺序写入时仍然显着更好.实际上,即使大多数RAM在顺序写入时更好,因为涉及的控制信号较少.

通过使用预写日志,您不用担心:

撕毁写(你在猫吃掉你的电源之前写了一半的树形图)>信息丢失(你实际上没有坚持树,但乔认为你这样做)>随机,同步磁盘I / O具有巨大的性能表现.

猜你在找的MsSQL相关文章