我正在构建数据索引,这将需要以形式存储大量三元组(document, term, weight)
。我将存储多达几百万个这样的行。目前我正在 MySQL 中将其作为一个简单的表来执行。我将文档和术语标识符存储为字符串值,而不是其他表的外键。我正在重写软件并寻找更好的数据存储方法。
看看 HBase 的工作方式,这似乎非常适合该架构。我可以映射,而不是存储大量三元组document
to {term => weight}
.
我在单个节点上执行此操作,所以我不关心分布式节点等。我应该坚持使用 MySQL 因为它有效,还是尝试 HBase 是明智之举?我看到 Lucene 使用它进行全文索引(这与我正在做的类似)。我的问题是,单个 HBase 节点与单个 MySQL 节点相比如何?我来自 Scala,那么直接的 Java API 是否比 JDBC 和 MySQL 解析等每个查询有优势?
我主要关心的是插入速度,因为这一直是以前的瓶颈。处理后,我可能最终会将数据放回 MySQL 进行实时查询,因为我需要做一些计算,这些计算最好在 MySQL 中完成。
我会尝试对两者进行原型设计,但我相信社区可以为我提供一些对此有价值的见解。
使用适合工作的正确工具。
有很多反 RDBMS 或 BASE 系统(基本可用、软状态、最终一致),而不是 ACID(原子性、一致性、隔离性、持久性)可供选择here http://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-stores/ and here http://themindstorms.blogspot.com/2009/05/quick-reference-to-alternative-data.html.
我使用过传统的 RDBMS,虽然您可以存储 CLOB/BLOB,但它们确实可以
没有专门为搜索这些对象而定制的内置索引。
您想要完成大部分工作(计算加权频率
插入文档时找到的每个元组)。
您可能还想做一些对有用性进行评分的工作
每次搜索后的每个 (documentId,searchWord) 对。
这样您每次都可以提供越来越好的搜索。
您还想存储每次搜索的分数或权重并进行加权
与其他搜索的相似度得分。
某些搜索可能比其他搜索更常见,并且
用户没有正确表达他们的搜索查询,尽管他们的意思是
进行共同搜索。
插入文档也会导致搜索权重发生一些变化
索引。
我想得越多,解决方案就变得越复杂。
你必须首先从一个好的设计开始。你的因素越多
设计预期越好,结果就越好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)