具有URI / URL密钥的节省空间的地图/字典/数据库

时间:2013-03-04 09:19:22

标签: database url dictionary map uri

我正在寻找一个节省空间的键值映射/字典/数据库,它满足某些属性:

  • 格式:密钥将由http(s)URI表示。这些值将是可变长度的二进制数据。
  • 大小:将有1-100亿个唯一密钥(平均长度为60-70字节)。值最初只有几十个字节,但最终可能增长到几十千字节(如果我决定存储多个版本,可能会更多)。数据的总大小将以兆兆字节或千兆字节为单位。
  • 硬件:数据必须分布在多台计算机上。此分发应确保来自特定域的所有URI最终都在同一台计算机上。此外,机器上的数据必须根据访问频率在RAM,SSD和HDD之间分配。在从群集中添加或删除计算机时,必须转移数据。最初不需要复制,但以后可能会有用。
  • 访问模式:我需要对数据进行顺序和(有些)随机访问。顺序访问将来自低优先级批处理过程,该过程不断扫描数据。在这种情况下,吞吐量比延迟重要得多。理想情况下,迭代将按字典顺序进行(即字典顺序)。随机访问是通过访问HTML页面中的URI而产生的,我希望其中大部分都指向来自与页面相同的域的URI,因此将位于同一台机器上,而其他将位于不同的机器上。我预计每秒最多需要100,000到1,000,000个内存中随机访问。数据不是静态的。读取将比写入更频繁地发生一到两个数量级。

最初,数据将由1亿到10亿个网址组成,每个网址有几十个字节的数据。它将托管在少量便宜的商用服务器上,具有10-20GB的RAM和几TB的硬盘。在这种情况下,将占用大部分空间来存储密钥和索引信息。出于这个原因,并且因为我预算紧张,我正在寻找能够在尽可能小的空间内存储这些信息的东西。特别是,我希望利用许多URI共享的公共前缀。通过这种方式,我相信可以将密钥和索引存储在比URI的总长度更小的空间中。

我已经研究了几种传统的数据结构(例如哈希映射,自平衡树(例如红黑,AVL,B),尝试)。只有尝试(有一些技巧)似乎有可能减少索引和键的大小(除了索引之外所有其他存储键)。我想到的最有希望的选择是将URI分成几个组件(例如example.org/a/b/c?d=e&f=g变成类似[example,org,a,b,c,d] = e,f = g])。各种组件都会在树状结构的后续级别中为子项编索索引,类似于文件系统。这似乎有利可图,因为许多URI共享相同的域和目录前缀。

不幸的是,我对各种数据库产品知之甚少。据我所知,他们中的很多人使用B树来索引数据。据我了解,索引和键所需的空间超过了URL的总长度。

所以,我想知道是否有人可以提供任何数据结构或数据库的指导,这些数据结构或数据库可以利用URI中的冗余来节省空间。其他的东西不太重要,但任何帮助都会受到赞赏。

谢谢,对于冗长而感到抱歉;)

0 个答案:

没有答案