我正在建立一个数据索引,这将需要以(document, term, weight)
的形式存储许多三元组。我将存储多达几百万个这样的行。目前,我正在MySQL中以简单表的形式进行此操作。我将文档和术语标识符存储为字符串值,而不是其他表的外键。我正在重新编写软件,并在寻找更好的存储数据的方法。
从HBase的工作方式来看,这似乎非常适合该架构。我可以将document
映射到{term => weight}
,而不是存储大量的三胞胎。
我在单个节点上执行此操作,因此我不在乎分布式节点等。我应该坚持使用MySQL,因为它可以工作,还是尝试HBase明智?我看到Lucene将其用于全文索引(类似于我在做什么)。我的问题确实是,单个HBase节点与单个MySQL节点相比如何?我来自Scala,所以直接的Java API可能比JDBC和MySQL解析等等在每个查询上都有优势吗?
我主要关心的是插入速度,因为以前一直是瓶颈。处理之后,我可能最终会将数据放回MySQL以进行实时查询,因为我需要进行一些计算,而这些计算最好在MySQL中完成。
我将尝试对两者进行原型(prototype)制作,但是我相信社区可以为我提供一些有值(value)的见解。
最佳答案
使用正确的工具完成工作。
有很多反RDBMS或BASE系统(基本可用,软状态,最终一致),而不是ACID(原子性,一致性,隔离性,耐久性)可以从here和here中进行选择。
我使用了传统的RDBMS,尽管您可以存储CLOB / BLOB,但它们确实
没有专门为搜索这些对象而定制的内置索引。
您想完成大部分工作(计算
插入文档时找到的每个元组)。
您可能还需要做一些工作来评估
每次搜索后每个(documentId,searchWord)对。
这样,您每次都可以进行更好的搜索。
您还想存储每次搜索的分数或权重并进行加权
与其他搜索的相似性得分。
某些搜索可能比其他搜索更普遍,
用户的意思不是正确地表达他们的搜索查询
进行常见搜索。
插入文档还应引起搜索权重的一些变化
索引。
我考虑得越多,解决方案就越复杂。
您必须首先从一个好的设计开始。您的因素越多
设计预期,结果会更好。
关于mysql - 如果HBase不在分布式环境中运行,它是否有意义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1683563/