繁体   English   中英

如何搜索庞大的非文本数据集?

[英]How to search over huge non-text based data sets?

在我正在工作的项目中,客户端具有旧的大型(TB级)RDBMS。 各种查询都很慢,没有时间来修复/重构模式。 我已经确定了需要优化的一组常见查询。 该集合分为两个部分:全文查询和元数据查询。

我的计划是从数据库中提取数据,并将其划分到两个不同的存储系统中,每个存储系统针对特定的查询集进行了优化。

对于全文搜索,Solr是最有意义的引擎。 分片和复制功能使其非常适合一半的问题。

对于元数据查询,我不确定走什么路线。 当前,我正在考虑将RDBMS与高度非规范化的架构一起使用,该架构表示来自“权威” RDBMS的数据的特定子集。 但是,我的客户担心的是,与已经包含这些子系统的Solr相比,缺少此类子系统的分片和复制以及设置此类功能的难度/复杂性。 在这种情况下,元数据采用整数,日期,布尔值,位和字符串的形式(最大大小为10个字符)。

是否有一个具有内置分片和复制功能的数据库存储系统,这对于查询所述元数据可能特别有用? 也许那里提供了良好的查询引擎的无SQL解决方案?

请照亮。

补充/回应:

Solr可以用于元数据,但是,元数据是易失的。 因此,我将不得不经常致力于索引。 这将导致搜索降级得很快。

RavenDB

缺点:它是AGPL许可的。 根据您的开发人员/服务器环境,您可以认为它在.NET上运行是一个缺点。 另外,我不了解.NET以外的其他平台的客户端状态。

索兰德拉(Solandra)

  • 集成Solr和Cassandra
  • Solr管理的全文本搜索
  • Cassandra管理的复制和分片

缺点:尚未发布。

ElasticSearch:

ElasticSearch看起来与RavenDB相似,但是它似乎强调了全文本搜索 ,而RavenDB则强调了它是通用的NoSQL数据库。

MongoDB用于您的元数据存储:

但是 ,缺点是您无法执行联接。 明智地对数据进行非规范化,以便避免这种情况。

我确定您知道在任何具有频繁更新的系统上都不会获得快速查询时间。 为了实现针对RDBMS的分片,您需要找到一些键来拆分记录并填充多个数据库。 然后,您可以同时查询所有数据,以简化地图的方式获取和处理数据。 这将使您随着数据的增长而增加计算机的数量,并可能使您提高操作速度。 从Google的快速搜索中,MongoDB和Hadoop都提供了这种地图/归约功能,我都不熟悉。

动态生成复杂的长期运行的报告并不少见。 但是,当报告生成完成时,通常会伴随着电子邮件通知。 它提供了一种很好的推送通知格式,可以与人类进行交互。 同样,如果这些报告是周期性的(例如,每周,每月等),则在这些报告准备就绪后,您仍然可以使用电子邮件通知,唯一的区别是自动开始生成时间。

如果使用elasticsearch ,则可以简单地将元数据添加为json文档的额外键:

{
    "message": ... your full text,
    "date": "2009-11-15T14:12:12",
    ...
}

然后,您可以同时搜索两者。 否则,如果您仍然想使用两种系统方法, monogoDB是具有自动分片的文档存储,它具有一些相当高级的查询机制(字段,map-reduce,用于快速查询的索引)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM