将 Couchbase 与数千种不同的模式结合使用
Using Couchbase with thousands of different schemas
考虑一个多租户应用程序,其中租户可以自由地为他们自己的模式建模。即:后端即服务。
根据这些要求,每个桶 'table' 是不可撤销的。相反,我正在考虑简单地使用属性 'schema-id' 来定义架构的 ID。每个'schema-id'都是基于tenantId + schemaid的复合键
就检索而言,仅应支持 'get by id'。从这个意义上说,我只是将 Couchbase 用作 k/v 存储而不是文档存储。
以上有什么注意事项吗?每个桶的实体数量是否会成为问题?还有什么要考虑的吗?
关键模式的想法对我来说听起来很棒。您将必须确保您的群集大小正确并随着时间的推移保持正确大小。
如果你想真正严格地控制一切,你甚至可以用一个简单的 REST API 把整个事情放在前面。然后,您可以严格控制访问、控制密钥模式等。该服务的每个用户都会获得一个 API 密钥,这将为他们提供一个会话。
为不同的模式使用不同的桶将无法扩展,因为我认为 CB 中只有 10 个桶的限制。
由于客户端知道密钥,我们可以将数据从 CB 映射到特定的 class,因为我们知道密钥的模式类型。
例如,如果键是 PRODUCT_1234 或 USER_12345,那么我们知道第一个键的数据是 PRODUCT 类型,第二个是 USER 类型。
考虑一个多租户应用程序,其中租户可以自由地为他们自己的模式建模。即:后端即服务。
根据这些要求,每个桶 'table' 是不可撤销的。相反,我正在考虑简单地使用属性 'schema-id' 来定义架构的 ID。每个'schema-id'都是基于tenantId + schemaid的复合键
就检索而言,仅应支持 'get by id'。从这个意义上说,我只是将 Couchbase 用作 k/v 存储而不是文档存储。
以上有什么注意事项吗?每个桶的实体数量是否会成为问题?还有什么要考虑的吗?
关键模式的想法对我来说听起来很棒。您将必须确保您的群集大小正确并随着时间的推移保持正确大小。
如果你想真正严格地控制一切,你甚至可以用一个简单的 REST API 把整个事情放在前面。然后,您可以严格控制访问、控制密钥模式等。该服务的每个用户都会获得一个 API 密钥,这将为他们提供一个会话。
为不同的模式使用不同的桶将无法扩展,因为我认为 CB 中只有 10 个桶的限制。 由于客户端知道密钥,我们可以将数据从 CB 映射到特定的 class,因为我们知道密钥的模式类型。
例如,如果键是 PRODUCT_1234 或 USER_12345,那么我们知道第一个键的数据是 PRODUCT 类型,第二个是 USER 类型。