Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mapreduce 如何在CouchBase上实现多租户?它能表演吗?_Mapreduce_Couchdb_Couchbase_Multi Tenant - Fatal编程技术网

Mapreduce 如何在CouchBase上实现多租户?它能表演吗?

Mapreduce 如何在CouchBase上实现多租户?它能表演吗?,mapreduce,couchdb,couchbase,multi-tenant,Mapreduce,Couchdb,Couchbase,Multi Tenant,我正在考虑一款可以存储客户数据的应用程序。考虑到bucket在CouchBase中的工作方式,所有客户数据都将在一个bucket中。看来我有两个选择: 在视图中实现多租户,方法是为每个记录分配一个字段,指明它所属的客户 通过在每一个客户ID键上添加一个因子来实现它 不过,由于我将使用视图,所以我真的很想同时使用这两种视图。在第2种情况下,我需要将数据保存在记录中,以便对其进行索引(或者我可以在映射阶段提取部分密钥,并对客户进行索引),在选项1中,我希望在检索数据时将其作为密钥的一部分进行检查,以

我正在考虑一款可以存储客户数据的应用程序。考虑到bucket在CouchBase中的工作方式,所有客户数据都将在一个bucket中。看来我有两个选择:

  • 在视图中实现多租户,方法是为每个记录分配一个字段,指明它所属的客户

  • 通过在每一个客户ID键上添加一个因子来实现它

  • 不过,由于我将使用视图,所以我真的很想同时使用这两种视图。在第2种情况下,我需要将数据保存在记录中,以便对其进行索引(或者我可以在映射阶段提取部分密钥,并对客户进行索引),在选项1中,我希望在检索数据时将其作为密钥的一部分进行检查,以确保我不会发送错误的客户数据

    问题是,这是一项多客户交互的服务,有时一个客户会创建一些数据,另一个客户会在第一个客户请求时查看数据。但是,至少可以说,在每个记录上放置一个ACL,列出所有有权查看该记录的人是有问题的

    我打赌有一个共同的方法或设计模式来回答这个问题,并将感谢一些最佳实践的指针


    如果索引同时对特定的相关数据段和客户id进行索引,我还担心性能。。。大量不同的客户可能会降低索引的效率。(但可能不是。)

    以下是我对你的问题的看法:

    [关于第1项和第2项]-尽管如此,似乎因为我将使用视图,所以我真的希望两者都使用

    这对我来说似乎没有意义。在Couchbase中,映射阶段可以包括来自键和值的内容。将数据同时存储在键和值中是没有意义的,因为可以保证在那里有1:1的复制。把它存放在最有意义的地方;在本例中,可能是值

    问题是,这是一项多客户交互的服务,有时一个客户会创建一些数据,另一个客户会在第一个客户请求时查看数据。但是,至少可以说,在每个记录上放置一个ACL,列出所有有权查看该记录的人是有问题的

    我的网站还将多租户数据存储在一个数据库中。在我的例子中,我使用对象唯一标识符作为键。默认情况下,客户可以访问属于他们的所有对象(我有一个用户对象,该用户与客户帐户关联)。用户还可以拥有分配给他们的其他权限,从而可以将来自另一个客户的单个对象添加到他们的用户帐户中,从而授予他们查看该对象的权限

    另一种选择是“通过模糊实现安全”,使用guid作为随机标识符,让客户能够查看他们拥有guid的任何对象


    但是,我不会尝试存储对象本身的权限。这将很快变得难以处理。您需要考虑您的特定用例,并决定哪种简单方法适用于大多数用例,而不支持其他1-2%的用例。

    以下是我对您的问题的看法:

    [关于第1项和第2项]-尽管如此,似乎因为我将使用视图,所以我真的希望两者都使用

    这对我来说似乎没有意义。在Couchbase中,映射阶段可以包括来自键和值的内容。将数据同时存储在键和值中是没有意义的,因为可以保证在那里有1:1的复制。把它存放在最有意义的地方;在本例中,可能是值

    问题是,这是一项多客户交互的服务,有时一个客户会创建一些数据,另一个客户会在第一个客户请求时查看数据。但是,至少可以说,在每个记录上放置一个ACL,列出所有有权查看该记录的人是有问题的

    我的网站还将多租户数据存储在一个数据库中。在我的例子中,我使用对象唯一标识符作为键。默认情况下,客户可以访问属于他们的所有对象(我有一个用户对象,该用户与客户帐户关联)。用户还可以拥有分配给他们的其他权限,从而可以将来自另一个客户的单个对象添加到他们的用户帐户中,从而授予他们查看该对象的权限

    另一种选择是“通过模糊实现安全”,使用guid作为随机标识符,让客户能够查看他们拥有guid的任何对象


    但是,我不会尝试存储对象本身的权限。这将很快变得难以处理。您需要考虑您的特定用例,并决定哪种简单方法适用于大多数用例,而不支持其他1-2%的用例。

    基于Couchbase之类的非规范化特性。。。当一个客户创建数据供另一个客户查看时。。。你能简单地复制一份并给它正确的客户限制ID吗?显然,这取决于用例。如果这种情况一直发生,它将无法扩展。这是两个客户之间协作的情况,因此他们希望能够对同一对象进行更改,这两个客户都是。(虽然可能不会同时进行,这意味着要么在应用层协调两个副本,要么在分区后处理最终的一致性——但我认为,如果不是在租赁问题上,后者将是更好的选择。)基于Couchbase之类的非规范化性质。。。当一个客户创建数据供另一个客户查看时。。。你能简单地复制一份并给它正确的客户限制ID吗?显然,这取决于美国