大量逐步/增量数据的数据结构和存储它的方法

时间:2014-08-23 16:58:54

标签: database data-structures

我不知道我是否不知道正确的术语,或者我正在寻找的东西不是一个常见的结构,所以当我试图描述我正在寻找的东西时,请耐心等待。< / p>

现在我有一个排序集。它随着时间的推移而变化很简单。插入,删除(k,v)对,或者特定键的值可能会改变。

不会或不会在多个密钥上执行任何操作。

我需要的是一种存储数据集的每个增量版本并将其映射到某个时间点的方法。我需要快速访问它的任何部分,并能够生成当时存在的确切排序集,以及它在整个时间段内的变化。

在每个突变之后存储实际的有序集是不可行的,因为它是大约10kb的数据并且平均每秒将具有大约2-3个突变。这是一个个人项目,因此每天写入2.5千兆字节的数据(每天10-20集)是成本过高的。

现在我已经提出了一个解决方案 - 这就是我的问题,我提出的解决方案是否有一个术语?有没有更好的方法呢?

如果我有一个初始数据集Orders,下一次数据迭代可以写成Orders + (K,V)然后不是将整个集合存储两次,而是简单地存储实际集合一次,然后是第二次时间它被存储为参考+突变。

然后,如果我想访问Orders [n],我会迭代订单[0] - &gt;订单[n]应用突变,我会生成及时存在的集合。

然而,这有一个很大的问题。我需要能够快速访问任何范围的数据 - 每天大约250,000次迭代*月或年 - 所以从0开始计算集合是不切实际的 - > n当n很大时。这里显而易见的解决方案是在某个时间间隔缓存生成的集合,而不是递归地计算给定数据点一直返回到Orders [0],它只需要计算回Orders[1,500,000]来找到哪个集合存在于Orders[1,500,100]

如果我认为这是构建数据的好方法,我应该多久缓存一次结果?

这样的事情存在吗?在我的研究中,许多消息来源说要使用链表或二叉树。我不需要树,因为我的数据是100%连续的,而不是分支。因此,如果我使用链表,我的困惑在于实际存储数据。这就是我完全陷入困境的地方。什么是最好的数据库&amp;存储这个数据库架构? (此时可以使用任何系统,虽然有一个node.js包装器是理想的,因为这是为前端提供数据的东西)或者编写二进制数据会更好吗?

即使是对我正在寻找的实际术语这么简单的事情,或者研究的替代数据结构也会有所帮助。谢谢!

2 个答案:

答案 0 :(得分:2)

这听起来像是持久二进制搜索树的一个很好的用例。持久性数据结构是在对结构执行操作之后,返回两个结构 - 更改前的结构和更改后的结构。至关重要的是,两个结构的内部表示共享内存,因此如果您有一个10KB的集合,则存储前后快照所需的时间远小于20KB。

由于您需要键/值存储,因此持久二进制搜索树可能是您最好的选择。与普通BST一样,所有操作都在O(log n)时间内运行。然后,您可以存储所有快照的数组,从而可以O(1)访问您想要的任何时间片。

希望这有帮助!

答案 1 :(得分:0)

您正在谈论的数据结构通常称为&#34;持久性数据结构&#34;或者有时候&#34;不可变数据结构。&#34;