【发布时间】:2014-08-23 16:58:53
【问题描述】:
我不知道我是否不知道正确的术语,或者我正在寻找的内容是否不是一个常见的结构,所以请耐心等待我尝试描述我正在寻找的内容。
现在我有一个排序集。它通过简单的修改随时间而变化。插入、删除 (k,v) 对,或者特定键的值可能发生变化。
不会或永远不会对多个键执行任何操作。
我需要一种方法来存储数据集的每个增量版本并将其映射到某个时间点。我需要快速访问其中的任何部分,并能够生成当时存在的准确排序集,以及它在一段时间内的变化情况。
在每个突变之后存储实际的排序集是不可行的,因为它大约有 10kb 的数据,平均每秒大约有 2-3 个突变。这是一个个人项目,因此每天每组(乘以 10-20 组)写入 2.5 GB 数据的成本太高了。
现在我想出了一个解决方案 - 我的问题是,我想出的解决方案有一个术语吗?有更好的方法吗?
如果我有一个初始数据集Orders,则下一次数据迭代可以写为Orders + (K,V),然后我不会将整个数据集存储两次,而是将实际数据集存储一次,然后再存储第二次作为参考 + 突变。
然后,如果我想访问 Orders[n],我将迭代 Orders[0] -> Order[n] 应用突变,然后生成及时存在的集合。
然而,这有一个大问题。我需要能够快速访问任何范围的数据 - 每天大约 250,000 次迭代 * 几个月或几年 - 所以当 n 很大时从 0 -> n 计算集合是不切实际的。这里明显的解决方案是在某个时间间隔缓存结果集,而不是递归地计算给定的数据点一直到 Orders[0] 它只需要计算回Orders[1,500,000] 以找到存在于的集合Orders[1,500,100].
如果我认为这是构建数据的好方法,我应该多久缓存一次结果?
这样的东西存在吗?在我的研究中,很多消息来源说使用链表或二叉树。我不需要树,因为我的数据是 100% 连续的,而不是分支的。因此,如果我使用链表,我的困惑在于实际存储数据。这就是我完全陷入困境的地方。存储它的最佳数据库和数据库模式是什么? (此时可以使用任何系统,尽管有一个 node.js 包装器将是理想的,因为这是将数据提供给前端的东西)或者编写二进制数据会更好吗?
即使是我正在寻找的实际术语或研究的替代数据结构这样简单的东西也会有所帮助。谢谢!
【问题讨论】: