这是问题,
我有一个SQL DB,包含您的常规客户,产品,订单架构,但很大。 [每张表有10万行]。还有一个包含order_email [apprx 1亿行]的大表。此表包含与订单关联的所有电子邮件通信。我在order_email的顶部实现了全文搜索,工作正常。
现在,我想扩展电子邮件搜索功能,以便根据其他域对象对其进行过滤。即回答像
这样的问题实现是对lucene结果和sql结果进行交集/连接,但是由于涉及表和索引的SIZE而没有遇到问题,我想不出这样做的方法
蛮力。将我的大多数数据库列添加为lucene字段。这相当于对我的整个数据库进行非规范化并创建一个Lucene索引(以Terrabytes为单位),所有列都作为字段。性能糟透,费用高昂。
获取Lucene结果集,从中获取OrderID并从Order中查询订单ID IN(来自Lucene的 ORDERID )中的SELECT *查询数据库。这不起作用,因为电子邮件搜索可能产生一百万个订单ID,这使得SQL查询在执行情况下表现不佳。
在应用程序代码中进行连接,但迭代sql结果和lucene结果。这意味着根据结果的大小,单个查询可以加载2个数百万行数据集并对其进行迭代,从而破坏CPU和内存。
关于如何构建2个大数据集的连接/交集的想法?
p.s:第一个暗示hadoop是一个烂鸡蛋。希望我能,但我们没有更多硬件的预算。
答案 0 :(得分:0)
就像OzrenTkalcecKrznaric在对这个问题的评论中所说,分页是你的朋友。 (请记住,有史以来最强大的功能算法是“分而治之”。)