gpt4 book ai didi

nosql - 如何为 Multi-Tenancy 应用程序 : EAV, 固定表模式、NoSQL 实现用户定义的字段和分组

转载 作者:行者123 更新时间:2023-12-04 02:11:03 26 4
gpt4 key购买 nike

我在 SaaS 工作,其中任何租户都可以有多个联系人列表,每个列表可以有此列表的联系人可以存储的任意数量的自定义字段以及列表的联系人可以包含的任意数量的组(使用组用于分割列表的联系人)。
每个联系人都有一个必填字段:email_address 和为列表定义的任意数量的用户定义字段,正如我提到的那样。
我们必须能够根据联系人所在的组和用户定义值的值找到列表中的联系人。
我们必须提供最多 30 个用户定义的字段。
我现在看到解决这个问题的三种方法:

  • 使用某种 EAV(我们尝试这样做)但它看起来相当复杂。
    我们有一个表列表(租户列表),一个相关表
    custom_fields,一个相关表subscribers,用于存储列表订阅者的email_addresses,表subscribers_custom_data 与订阅者相关
    和 custom_fields 表(订阅者自定义字段的存储值)。
  • 字段表模式。它的描述在这里http://blog.springsource.com/arjen/archives/2008/01/24/storing-custom-fields-in-the-database/ .
    在这种情况下,我们将使用与自定义字段相关的字段,它将所有自定义字段存储在列中,例如有 30 列来存储每个可能的自定义字段的值,以及一个存储列名称和用户定义名称映射的表 field 。看起来也很复杂。我们至少必须有至少 30 个索引才能通过自定义字段的值进行搜索,还有其他问题,
  • 至少使用某种 NoSQL 数据库来存储用户定义的字段和列表组。
    您认为这样的数据库可以在这里提供帮助吗?如果可以,如何设计用于存储自定义字段和组。
    我尝试查看不同类型的 NoSQL,例如像 MongoDb 这样的面向文档的 NoSQL,但我马上就看不到它如何帮助解决这个问题。我们可以在此处存储任意属性,但要搜索自定义字段的值,我们需要提前为它们编制索引,因此我们必须知道我们将拥有哪些自定义字段。

  • 感谢您提供有关它的任何信息。

    最佳答案

    如果您希望所有字段始终被索引,请尝试使用 Apache Solr 之类的技术。索引一切。 Solr 的主要目的是成为一个全文搜索引擎,但它基本上是一个面向文档的数据库。
    以下是关于其他选项的评论:

  • EAV 不好,我反对使用它。它打破了关系数据库设计的许多规则,并且无法扩展。我在 Stack Overflow 上写了很多关于这个的文章,所以搜索 my answerseav标签。
  • 您不仅需要 30 个索引——您需要多达 30 个阶乘索引来处理任何可能的索引组合。请记住,您可以创建多列索引,这些类型的索引对于支持某些查询很重要。当然,创建这么多索引是完全不切实际的;您需要创建索引以匹配要优化的查询。如果您不知道将拥有哪些字段以及将对它们进行哪些查询,则无法进行优化。
  • 像 MongoDB/CouchDB 这样的面向文档的数据库并不神奇,不管它们的拥护者如何声称它们是魔法。它们要求您索引文档以进行快速搜索,这意味着您需要知道文档的可索引字段。
    在运行时创建索引是一个问题,因为它可能需要很长时间,具体取决于要索引的数据量。您必须找到一种方法来“离线”运行索引创建(即不要让用户在单个 http 请求期间等待它),然后在完成时通知他们。
  • 您应该阅读 How FriendFeed uses MySQL to store schema-less data .它们使用序列化 LOB,基本上将所有自定义属性组合到一个 XML 或 JSON blob 中。因此,用户可以随时创建任意数量的附加自定义字段。但是在可以搜索给定的自定义字段之前,您需要创建一个子表来引用该字段包含给定值的行。因此,您得到的索引仅与给定用户定义的自定义字段的实例数一样大。而且您不需要使每个字段都可搜索。
  • 关于nosql - 如何为 Multi-Tenancy 应用程序 : EAV, 固定表模式、NoSQL 实现用户定义的字段和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4237063/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com