用于处理动态分类法的专用多面搜索引擎 - 仅有助于性能还是灵活性?

2024-01-01

一段时间以来,我一直在考虑如何使用类似于 eBay 的分类法和依赖于特定产品类别的属性来对典型的电子商务网站进行建模。

第一次尝试是在 EAV 和 Table Per Class 数据库继承建模之间进行选择。我选择后者是因为性能,但这意味着为每个特定(类别树中的叶子)产品类别创建专用表,并将特定类别属性(例如电视的分辨率)建模为单独的列。

虽然性能良好,但如果您需要向现有类别添加属性或添加新类别,则此设置并不灵活。对于每个此类更改都需要以下内容:

  • 更改/创建表
  • 用于按特定属性过滤此类类别的新表单
  • 用于生成用于搜索和过滤的数据库查询的新代码
  • 一些新的视图模型/DTO 和用于展示新类别产品的视图

为了应对这种复杂性,我认为需要在 xml 甚至 excel 文件中对这些属性进行某种元表示(甚至在应用程序之外),以便在每次更改时都可以自动生成所有提到的代码(sql/orm 查询、应用程序代码、模板)。因此它可以帮助开发,但仍然需要测试和额外的部署。

那时我了解到 eBay 并没有真正使用关系数据库进行搜索,而且他们的分类非常灵活,他们可以很快添加新的叶类别。此外,它们的类别可能不是来自关系数据库中建模的分层树的类别,而只是搜索属性(方面)。

在快速浏览了最有前途的专用分面搜索设置(单独的 Solr 实例)后,我不确定它是否可以帮助我灵活地应对分类法更改,因为通常 Solr 只是以某种方式镜像关系数据库,因此特定类别属性仍然必须在数据库中建模为 DBMS 元数据,因此例如。动态生成用于过滤属性的 UI 表单将很困难,除非:

1)我将使用EAV fasion将数据保存在RDBMS中,并使用SOLR搜索克服其性能问题(但仍然存在EAV混乱、没有数据完整性强制等问题)

2)我将只在 RDBMS 中保留属性字典(即仅保留它们的名称和类型),并将特定属性值存储在 SOLR 中,将其用作除搜索工具之外的非关系数据存储。我也不相信这个解决方案(即使可能),因为应用程序将与 solr 紧密耦合(即产品版本管理 CRUD 将直接与 SOLR 交互)。

你怎么看?您认为对于任何类型的此类(高性能)分类法灵活性,代码生成都是不可避免的吗?你会怎么处理?也许数据库中 EAV 风格的一些单独的数据字典只是用于代码生成目的?我想我也可以使用 MongoDB 之类的东西,但 UI 代码生成(运行时或非运行时)仍然需要某种元数据。

这里有很多问题,但我不想将其分解为更小的问题,因为我对处理更大类此类问题时的通用设计方法感兴趣。


我并不声称对所有这些都有明确的答案(这是一个相当开放式的问题,您应该尝试将其分解为更小的部分,这取决于您的实际要求,事实上,我很想投票关闭它)但我会评论一些事情:

  1. 我会忘记在 RDBMS 上对此进行建模。分面搜索在关系模式中不起作用 http://www.kimbly.com/blog/000239.html.
  2. IMO 这不是代码生成的正确位置。您应该设计您的代码,使其不会随着数据更改而更改(我不是在谈论schema变化)。
  3. 在 Excel 电子表格上存储元数据/属性似乎是一个非常糟糕的主意。我将构建一个 UI 来编辑它,它将存储在 Solr / MongoDB / CouchDB / 您选择管理它的任何内容上。
  4. Solr does not“只是镜像关系数据库”。事实上,Solr 完全独立于关系数据库。最常见的情况之一is将数据从 RDBMS 转储到 Solr(在此过程中对数据进行非规范化),但 Solr 足够灵活,可以在没有任何关系数据源的情况下工作。
  5. Solr 中的分层分面 http://wiki.apache.org/solr/HierarchicalFaceting仍然是研究中的一个悬而未决的问题。目前正在研究两种不同的方法(SOLR-64 http://issues.apache.org/jira/browse/SOLR-64, SOLR-792 http://issues.apache.org/jira/browse/SOLR-792)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于处理动态分类法的专用多面搜索引擎 - 仅有助于性能还是灵活性? 的相关文章

  • 设计评论表

    基本上我想创建一个评论系统 其中评论可能有也是评论的父母 但我也希望他们可能有可能是其他东西的父母 例如用户或产品 即 我希望能够对产品发表评论 用户 其他评论或几乎任何资源 我该怎么做呢 当前表 标签 产品 用户 评论 编辑 这将适用于流
  • 如何使用 pysolr 对 solr 进行原子更新?

    我找不到关于如何使用 pysolr 更新 solr 的合适文档 截至 2014 年 11 月原子更新 https github com toastdriven pysolr commit c49be48d459448532b5ad0f505
  • 谁能用适当的例子向我解释 1NF、2NF、3NF、BCNF 规则?

    这是一个常见的面试问题 我遇到过一次面试 面试官给了我一张桌子 让我告诉他这张桌子是哪种范式 如果它在 NF中 那么将其归一化到下一个NF 我总是对这些正常形式的数据库感到困惑 谁能向我解释这些范式 并举出每个 NF 如何建模到表中的正确示
  • 如何在不使用 SPLITSHARD 的情况下动态向 SolrCloud 添加节点?

    我已经设置了Solr云有 4 个碎片 我向 SolrCloud 添加了 8 个节点 4 个领导者和 4 个副本 每个节点运行在不同的机器上 但后来我发现我的数据越来越多 每天400万文件 这样我的 4 个分片就不够用了 因此 我想动态地向该
  • 标签系统:Toxi 解决方案问题

    我对标签数据库模式的 Toxi 解决方案感到有点困惑 我正在开发一个系统 用户可以向该系统提交项目 并且这些项目可以具有与其关联的标签 在阅读了 tagchemas 后 我发现 Toxi 解决方案最适合我的需求 但是 我不完全确定我的计划是
  • Neo4j 入门

    我对 neo4j 完全陌生 很抱歉问这样一个基本问题 我已经安装了 neo4j 我正在使用 shell localhost 7474 webadmin console 我正在寻找一个很好的示例 它使用一些 shell 命令从预先存在的图形数
  • 分层数据库模型

    我正在设计一个关于宠物的分类网站 该网站将包含 3 个 主要 类别的广告 A Sale B Breeding C Jobs 我面临的问题是 所有 3 个广告类别都有一些共同点 但也有一些差异 例如 类别 A B 和 C 都有以下共同点 ca
  • 在同一个应用程序上创建多个 PouchDB 数据库是否被认为是糟糕的设计?

    我有 Mysql 背景 现在使用 Pouchdb 我习惯了每个应用程序有 1 个数据库和许多表的 SQL 模式 在 pouchDB 中情况有所不同 因为数据不是存储在表中而是存储在文档中 因此 在我的应用程序中 我有一个任务数据库 使用以下
  • 数据库索引:是好事、坏事还是浪费时间?

    这里通常建议添加索引作为性能问题的补救措施 我只讨论读取和查询 我们都知道索引会使写入速度变慢 多年来 我在 DB2 和 MSSQL 上多次尝试过这种补救措施 但结果总是令人失望 我的发现是 无论索引会让事情变得更好是多么 明显 事实证明查
  • Cassandra 集群 - 特定节点 - 特定表高丢弃突变

    我在生产中的压缩策略是 LZ4 压缩 但我将其修改为 Deflate 对于压缩更改 我们必须使用 nodetool Upgradesstables 强制升级所有 sstable 上的压缩策略 但是 一旦在集群中的所有 5 个节点上完成了 U
  • 是否有 NoSQL 解决方案的比较(在某些情况下哪个更好?)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 当我在 Linux PHP 架构中构建基于密钥的归档应用程序时 我正在尝试了解有关 NoSQL 的更多信息 谁能解释一下主要解决方案
  • OT 和 CRDT 之间的区别

    有人可以简单地向我解释一下操作转换和 CRDT 之间的主要区别吗 据我了解 两者都是允许数据在分布式系统的不同节点上无冲突地收敛的算法 在哪种用例中您会使用哪种算法 据我了解 OT主要用于文本 而CRDT更通用 可以处理更高级的结构 对吧
  • 用户评级的 ER 模型

    我有很多 用户 每个用户最多有 5 个 服务 用户应该能够对每项服务进行评分 0 5 我还想保留用户的平均评分 这是我的想法 但是还有更好的方法吗 User id user name dob 服务 固定数量的服务 id service de
  • 如何使用 nosql 构建成就和徽章

    我目前有一个使用 mongodb 作为数据库的社交游戏应用程序 我的问题是 如果我想创建一个积分和徽章系统 有哪些建议 成就 徽章的业务逻辑可能会变得非常复杂并且非常临时 因此实时授予徽章似乎效率不高 我想象将跟踪的操作添加到队列中的某处
  • 是使用多个数据库各有一个架构更好,还是一个数据库有多个架构更好? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 After 这条评论 https stackoverflow com questions 1130555 postgresql pitr bac
  • 需要在 java api 中的 Solr 搜索中搜索文本及其周围的几行

    我正在使用 solr 7 7 2 并且我使用 solrj 在 Solr 中编写了一个 Java 程序 该程序在一个巨大的文本文件中搜索单词 我使用以下代码来显示代表整个文本的搜索结果 SolrQuery params new SolrQue
  • 如何使用 Solr 索引 pdf 内容?

    我正在尝试使用 SolrJ 索引一些 pdf 文档 如下所述http wiki apache org solr ContentStreamUpdateRequestExample http wiki apache org solr Cont
  • 创建用于存储高尔夫球成绩的可扩展数据库架构

    我正在尝试设计一个数据库来存储我所有的朋友和我的高尔夫球成绩 您可能知道 高尔夫得分由 18 洞的个人得分组成 我可以想到两种设计模式的方法 创建一个表 每个洞有一列 例如 h1 到 h18 该表具有引用其他表的 FK player id
  • 如何使用c#从数据桶中获取所有文档?

    如何获取数据桶中的所有文档 我尝试过一个示例 但我只能获得一个特定的文档 这是我的代码 CouchbaseClient oclient oclient new CouchbaseClient vwspace data bucket name
  • Solr PatternReplaceCharFilterFactory 未替换为指定模式

    所以我对 Solr 很陌生 但我尝试使用 PatternReplaceCharFilterFactory 对将存储的电话号码字符串进行一些预处理 这是该字段的配置

随机推荐

  • RavenDB 对列表属性进行 Map/Reduce

    刚刚学习 Map Reduce 我错过了一个步骤 我读过这篇文章 使用 NET 客户端的 RavenDB Map Reduce 示例 https stackoverflow com questions 4253334 ravendb map
  • 命名参数什么时候有用?

    C 代码中是否存在位置参数不够用的情况 我真的没有看到命名参数有任何好处 相反 我可以看到过度使用命名参数会使代码难以阅读 所以我的问题是 为什么有人会使用它们以及它如何帮助编写更好的代码 因为我确信它们不是毫无理由地实现的 这对我来说看起
  • 如何在 WSO2 APIM 中处理外部/第三方 API 的外部身份验证

    我正在使用 WSO2 APIM 2 5 0 和 IS 5 6 0 它们都是集成的并且运行良好 现在 如果我在 API 管理中加入第三方 API 并使用 oauth 令牌 我就可以访问它 但问题是如何处理具有自己的身份验证的任何外部或第三方
  • const_cast 和 UB

    5 2 11 7 注 取决于 对象的类型 写操作 通过指针 左值或指针 到由 a 产生的数据成员 const cast 抛弃 a const 限定符68 may生产 未定义的行为 7 1 5 1 本节 C 03 的措辞令我惊讶 令人惊讶的是
  • 两次时间差

    我想以 hh mm 格式显示两个时间之间的差异 第一个时间来自数据库 第二个时间是系统时间 时差每秒更新一次 我怎样才能做到这一点 目前 我正在使用两个手动时间 如果效果完美 那么我会将其实施到我的应用程序中 public class Ma
  • 将星星添加到 p 值

    我计算了多个变量均值差异的 Anova F 检验 p 值 现在我想添加 星星 来指示 p 值的显着性水平 我希望 表示 10 水平的显着性 表示 5 水平的显着性 表示 1 水平的显着性 我的数据如下所示 structure list Va
  • 如果未安装应用程序,如何获取 Facebook 应用程序链接

    如果用户点击 Facebook 应用程序中的深层链接时未安装我的应用程序 如何获取应用程序链接数据 令人惊讶的是 Facebook 关于这个问题的文档很少 我有一个深层链接https fb me 635533123230265 返回 HTM
  • 在 ASP.NET MVC 组织帐户中访问 Azure AD Graph API

    我正在尝试根据登录用户的 AD 组限制页面访问 我对以下代码有问题 var tenantId incomingPrincipal FindFirst GraphConfiguration TenantIdClaimType Value cr
  • 如何在 Eclipse 中为编辑器创建大纲视图?

    我在 eclipse 中创建了一个自定义编辑器 其大纲视图显示大纲不可用 我尝试搜索此内容 发现了以下链接 常见问题解答 如何为我自己的语言编辑器创建大纲视图 http wiki eclipse org FAQ How do I creat
  • 在 Ruby 中生成高斯(正态分布)随机数的代码

    在 ruby 中生成正态分布随机数的代码是什么 注 我回答了我自己的问题 但我会等几天再接受 看看是否有人有更好的答案 EDIT 为了搜索这个 我查看了两次搜索产生的 SO 上的所有页面 正态分布 红宝石 and 高斯 随机红宝石 蟒蛇的随
  • 使用 [NSDate date] 获取当前日期和时间

    我的系统的日期时间是 5 月 26 日 22 55 但是当我与 NSDate date 日期时间是 5 月 27 日 02 35 是因为时区的原因吗 如果是 如何解决这个问题 当我得到日期时间时 给我系统的日期并且不检查时区 NSLocal
  • yii:尝试获取非对象的属性

    嗯 我发现this https stackoverflow com questions 18335513 trying to get property of non object error in yii 但我看不到与我的错误的关系 我是新
  • Python - 从其他内部类引用内部类

    我试图从另一个内部类引用一个内部类 我都尝试过 class Foo object class A object pass class B object other A and class Foo object class A object
  • SVG - 单击不是函数[重复]

    这个问题在这里已经有答案了 我有一个这样的元素
  • AJAX更新数据库

    抱歉没有说出我的问题 实际上我想更新数据库中的数据 但现在的问题是 即使我尝试选择批准或拒绝ajax仍然不会更新 我是 ajax 新手 尝试在网络上搜索 但我的代码仍然有问题 这是我的 php 页面
  • HTML 报纸专栏

    我正在尝试使用文本块创建报纸样式的专栏 我希望文本均匀分布在两列中 这样可以对文本长度的变化做出反应 仅使用 HTML CSS 可以吗 如果不行 可以使用 javascript 吗 Thanks 两个注意事项 适用于印刷媒体的内容不适用于显
  • 数学表达式的自定义解释器

    我必须评估大量包含变量的表达式 并且我正在考虑编写一个小型自定义解释器以保持编译快速且小型 但是我对这个主题没有经验 并且有一些问题 假设我们有一个包含数学表达式和一组有限对象的文件 该文件可能如下所示 expr x y z 2 x y x
  • Flask 应用程序部署到 Heroku 时出错 at=错误代码=H10 desc="应用程序崩溃" method=GET path="/"

    在 Heroku 中部署时 示例 Flask 应用程序在 error code H10 desc App crashed method GET path 处给出错误 Flaskapp py from flask import Flask a
  • Dataframe聚合方法传递列表问题

    这可能是一个错误 但是您对此 pandas 功能有何看法 df pd DataFrame np arange 20 reshape 10 1 columns AB def f x print type x df agg f Output
  • 用于处理动态分类法的专用多面搜索引擎 - 仅有助于性能还是灵活性?

    一段时间以来 我一直在考虑如何使用类似于 eBay 的分类法和依赖于特定产品类别的属性来对典型的电子商务网站进行建模 第一次尝试是在 EAV 和 Table Per Class 数据库继承建模之间进行选择 我选择后者是因为性能 但这意味着为