如何将一个非常大的lucene结果集连接到一个真正的大型sql表[百万行的10]

时间:2013-07-24 17:10:27

标签: c# sql-server architecture lucene.net large-data

这是问题,

我有一个SQL DB,包含您的常规客户,产品,订单架构,但很大。 [每张表有10万行]。还有一个包含order_email [apprx 1亿行]的大表。此表包含与订单关联的所有电子邮件通信。我在order_email的顶部实现了全文搜索,工作正常。

现在,我想扩展电子邮件搜索功能,以便根据其他域对象对其进行过滤。即回答像

这样的问题
  • 显示发送电子邮件的客户,其中包含“永远不会放弃你”的短语
  • 显示包含关联电子邮件的订单,其中包含“more ponies”。

实现是对lucene结果和sql结果进行交集/连接,但是由于涉及表和索引的SIZE而没有遇到问题,我想不出这样做的方法

我的失败方法

  • 蛮力。将我的大多数数据库列添加为lucene字段。这相当于对我的整个数据库进行非规范化并创建一个Lucene索引(以Terrabytes为单位),所有列都作为字段。性能糟透,费用高昂。

  • 获取Lucene结果集,从中获取OrderID并从Order中查询订单ID IN(来自Lucene的 ORDERID )中的SELECT *查询数据库。这不起作用,因为电子邮件搜索可能产生一百万个订单ID,这使得SQL查询在执行情况下表现不佳。

  • 在应用程序代码中进行连接,但迭代sql结果和lucene结果。这意味着根据结果的大小,单个查询可以加载2个数百万行数据集并对其进行迭代,从而破坏CPU和内存。

关于如何构建2个大数据集的连接/交集的想法?

p.s:第一个暗示hadoop是一个烂鸡蛋。希望我能,但我们没有更多硬件的预算。

1 个答案:

答案 0 :(得分:0)

就像OzrenTkalcecKrznaric在对这个问题的评论中所说,分页是你的朋友。 (请记住,有史以来最强大的功能算法是“分而治之”。)