如何为多租户应用程序实现用户定义的字段和分组:EAV、固定表模式、NoSQL
我在SaaS工作,任何租户都可以有多个联系人列表,每个列表都可以有任意数量的自定义字段,该列表中的联系人可以存储任意数量的组,该列表中的联系人可以包括任意数量的组(组用于分割列表中的联系人)。 每个联系人都有一个必填字段:email_address和任意数量的用户定义字段,这些字段是为我提到的列表定义的。 我们必须能够根据联系人所在的组和用户定义的值找到列表中的联系人。 我们必须提供多达30个用户定义的字段。 我现在看到了解决这个问题的三种方法:如何为多租户应用程序实现用户定义的字段和分组:EAV、固定表模式、NoSQL,nosql,field,entity-attribute-value,defined,Nosql,Field,Entity Attribute Value,Defined,我在SaaS工作,任何租户都可以有多个联系人列表,每个列表都可以有任意数量的自定义字段,该列表中的联系人可以存储任意数量的组,该列表中的联系人可以包括任意数量的组(组用于分割列表中的联系人)。 每个联系人都有一个必填字段:email_address和任意数量的用户定义字段,这些字段是为我提到的列表定义的。 我们必须能够根据联系人所在的组和用户定义的值找到列表中的联系人。 我们必须提供多达30个用户定义的字段。 我现在看到了解决这个问题的三种方法: 使用某种EAV(我们尝试这样做),但它看起来相当
谢谢您提供的任何相关信息。如果您希望所有字段都能一直被索引,请尝试使用这样的技术对所有字段进行索引。Solr的主要目的是成为一个全文搜索引擎,但它基本上是一个面向文档的数据库 以下是对其他选项的评论:
eav
标记下搜索
使用我的用例,我将能够知道可索引字段(但仅在运行时)。租户可以定义自己的字段集(通过从一组预定义字段中选择和/或添加自己的字段描述符)。所以当他们添加一个新字段时,我应该能够启动(稀疏)索引创建。因此,对于这个特定场景,面向文档的存储是否最适合?是的,文档存储可以在这种情况下工作。请参阅上面我的编辑。至于使用blob,不清楚如何删除/编辑自定义字段。例如,用户可以删除其容器中的字段,并且应删除该容器所有实体中的字段。您能告诉我如何删除/编辑自定义字段并在所有实体中反映它吗?除此之外,例如通过使用添加/删除自定义字段,还应使用和筛选使其可用。如果发生EAV级联删除。一个字段的大小是有限的,很难预测它将达到blob大小的限制。但是很难说nosql是否能带来任何好处。比尔,你见过使用nosql作为EAV的替代方案吗?问题是用户应该在线添加/编辑/删除自定义字段,并且这些更改应该立即反映到所有实体。我宁愿说不同的行可以有不同的属性集。