我正在尝试实现一个存储系统来支持数据标记。这个系统的一个非常简单的应用就像 Stackoverflow 上的问题,它被标记了多个标签。一个查询可能包含多个标签。这看起来也像在谷歌上搜索多个关键词。
这个系统维护的数据集会非常大,比如几十TB、几十亿的条目。
那么在这个系统中我应该使用哪些数据结构和算法来维护和查询数据呢?并且数据可以存储在一组机器上。
是否有任何指南或论文来描述此类问题和解决方案?
您可能想阅读以下两本书:
集体智慧在行动
Satnam Alag (ISBN: 1933988312)
http://www.manning.com/alag/
“第 3 章。从标签中提取情报”涵盖:
编程集体智能
托比·塞加兰 (ISBN: 978-0-596-52932-1)
http://shop.oreilly.com/product/9780596529321.do
“第 4 章。搜索和排名”涵盖:
希望能帮助到你。
您的问题非常困难,但是有很多相关的论文和书籍。Amazon Dynamo 论文、yahoo PNUTS和这个hadoop 论文就是一个很好的例子。因此,首先,您必须决定如何跨集群分布数据。数据必须在网络上均匀分布,没有热点。一致的散列将是解决这个问题的好方法。此外,数据必须是冗余的,任何条目都需要存储在多个位置以容忍单个节点的故障。
接下来,您必须决定如何在您的系统中进行写入。每次写入都必须跨包含更新数据条目的节点进行复制。您可能想了解 CAP 定理和最终一致性概念(维基百科有一篇关于这两者的好文章)。此外,还有一个一致性 - 延迟权衡。您可以使用不同的机制进行写入复制:某种 gossip 协议或状态机复制。
我不知道你的意思是哪种标签,这个标签是手动分配给条目还是从数据中学习的。无论如何,这是一个信息检索(IR)领域。您可能会使用某种倒排索引来有效地按标签或关键字搜索条目。此外,您必须使用一些查询结果排名算法。