我使用持久性数据结构的主要原因首先是最小化锁的使用,因此数据库可以尽可能平行.此外,实现ACID事务也将更容易,甚至能够抽象数据库以在某种集群上并行工作.
这种方法的伟大之处在于它可以实现几何免费的时间数据库.这是非常好的,特别是网络和数据分析(例如趋势).
所有这一切非常酷,但我对使用磁盘上持久数据结构的整体性能有点怀疑.即使今天有一些非常快的磁盘,并且所有写入都可以异步完成,所以响应始终是立即的,我不想在一个假的前提下构建所有应用程序,只是为了实现它不是一个很好的做到这一点
这是我的思路:
– 由于所有写入异步完成,并且使用持久性数据结构将不会使先前和当前有效的结构无效,因此写入时间并不是瓶颈.
– 有一些关于结构如this的文献,正是用于磁盘使用.但是在我看来,这些技术将增加更多的读取开销来实现更快的写入.但我认为恰恰相反是最好的.此外,许多这些技术最终都是多版本的树,但是它们并不是绝对不可变的,这对于持续的开销是合理的.
– 我知道当数据库附加值时,仍然会有某种锁定,我也知道如果不是所有的版本都要维护,应该有一个很好的垃圾回收逻辑(否则文件大小肯定会急剧上升) .也可以考虑增量压缩系统.
– 在所有搜索树结构中,我真的认为红黑最接近我需要的,因为它们提供的旋转次数最少.
但是一路上有一些可能的陷阱:
– 异步写入 – 可以影响需要实时数据的应用程序.但是,大多数情况下,我不认为Web应用程序是这样.此外,当需要实时数据时,可以设计出另一种解决方案,例如需要以更实时的方式工作的特定数据的检入/签出系统.
– 也可能导致一些冲突,尽管我没有想到可能发生的一个很好的例子.在正常的RDBMS中也可能发生提交冲突,如果两个线程正在使用相同的数据,对吗?
– 拥有这样一个不可变的界面的开销会呈指数级增长,一切都注定要尽快失败,所以这一切都是一个坏主意.
有什么想法吗?
谢谢!
编辑:
对于持久的数据结构似乎有误解:
http://en.wikipedia.org/wiki/Persistent_data_structure