【问题标题】:Solr / rdbms, where to store additonal dataSolr / rdbms,存储附加数据的位置
【发布时间】:2012-01-25 15:06:08
【问题描述】:

当您需要更多关于构面结果的数据时,最佳做法是什么。

即。我需要一个友好的名称/图像/元关键字/描述/等等。用于产品类别。 (在分类时)

  • 将其包含在文档中? (可能导致重复的掠夺)
  • 在 solr 中引入 category 作为新索引(或在 solr 中通过 doctype=category 字段伪造)
  • 使用 rdbms 使用 SELECT WHERE IN (..category facet result ids..) 查找其他数据

谢谢,

雷姆科

【问题讨论】:

  • 请量化“大量信息”。您要处理多少个实体,您的数据模型有多复杂?
  • 这不是很复杂。这只是更多的数据,然后我想在 solr 中建立索引。即:我有一个产品目录索引(具有多值 category_id 字段。但类别是系统中的第一类实体),所以我也需要类别名称/url/图像/元数据等

标签: solr lucene rdbms solrnet


【解决方案1】:
  • 使用适合您数据的快速 NoSQL 数据库

BTW Lucene 是 Solr 的底层,实际上也是 NoSQL 类型的存储工具。

如果我是你,我会使用 MongoDB。这是我想到的第一个 db,因为您需要二进制数据,而他们实际上发明了 BSON,这是现在以类似 JSON 的方式传输二进制数据的普遍手段。

如果您的数据结构更像图形(如社交网络),请查看 Neo4j,它具有令人眼花缭乱的快速图遍历算法。

【讨论】:

    【解决方案2】:

    关系数据库可以可靠地执行“类别是一流实体”的事情。您需要参照完整性:产品可能不属于不存在的类别。已删除的类别不得有其子类别。规范化的 RDB 可以通过模式强制引用完整性。 NoSQL DB 必须与客户端代码(您必须编写)一起使用以强制执行参照完整性。


    让我们看看“产品的类别必须存在”和“子类别的父母必须存在”是如何完成的:

    RDB:将类别分配给产品的表(m:n 关系)必须通过ON DELETE CASCADE 键控到产品和类别。如果一个类别被删除,一个产品根本就不能有这样一个类别。一个作为子类链接到另一个类别的类别:相关字段有一个ON DELETE CASCADE。这意味着如果删除了一个父级,它的子级就不能存在。这整个方法是声明性的(“它是这样声明的”),所有的复杂性都存在于数据中,我们不需要臭代码来为我们做这件事。您可以像了解数据库的实际含义一样自然地建模数据库。

    文档存储类型 NoSQL:您需要编写代码来完成所有工作。 “类别已删除”是一个用例,您需要找到具有该类别的产品,并更新每个产品。您必须为每个用例编写代码。管理子类别也是如此。数据模型可能非常愚蠢,但它们对现实世界的影响必须在代码中建模。而且它在代码和控制流中而不是在数据结构中更难推理

    真的有需要 NoSQL 数据库的性能需求吗?

    因此,请使用 RDBMS 来管理您的数据。然后使用直接导入处理程序或客户端代码插入/更新非规范化实体以进行搜索。如果对您网站的大多数请求都可以在 Solr 查询中表达,那就太好了!


    关于在 Solr 中表达层次分面,请参见'Ways to do hierarchial faceting in Solr?'。

    【讨论】:

      【解决方案3】:

      我会考虑两种选择:

      1.) 增强每个文档的信息而不对其进行索引(以保持索引尽可能小)。关键是,我不会存储图像洞察 Lucene/Solr - 只有一个文件指针。

      2.) 将附加数据存储在 rdbms 或 nosql (linke mongoDB) 上以供查找,如您所写。

      我最喜欢的是第二个。一,因为数据库是存储数据的传统和最优化的方式。 但最后这取决于您的系统,因为您应该记住,您需要时间来连接数据库、搜索数据并将附加信息发送回应用程序。 因此,将所有内容存储在 lucene 上可能会更快。

      也许一个小的性能测试会很有用。

      【讨论】:

      • 在类别页面上,我目前正在执行此操作:使用 SQL 查询当前类别及其子类别。查询solr产品索引,按category_id分面。使用唯一 id 将两者相交以构造视图模型,其中包含来自 facet 的类别和计数。
      • 另一种选择是将类别实体存储在索引中。并发出 2 个 solr 查询: - 一个从类别索引中获取类别/子类别。 - 从产品索引中获取类别方面。 - 与唯一 ID 相交。
      • 两者(相交)的问题是您无法再计算分页。 IE。对于产品列表,我查询产品的 solr。然后与数据库相交以查看是否有可用库存。在这种情况下你将如何处理分页(因为我不想一次性从服务器获取太多)
      • 我将 solr 作为纯搜索/方面索引和用于数据存储方法的 sql。
      • @Remco Ros >在这种情况下你将如何处理分页
      【解决方案4】:

      也许我错了,但如果您在 Solr 主干上,您可以从 Solr join suport 中受益,这将允许您索引多个实体之间的关系,同时对两者执行条件。

      【讨论】:

      • 我见过这个。也很期待吧。但我们现在必须坚持使用稳定版本。
      猜你喜欢
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      相关资源
      最近更新 更多