Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.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
Caching 如何在Cassandra集群中为大量使用它的客户组织公平缓存?_Caching_Cassandra - Fatal编程技术网

Caching 如何在Cassandra集群中为大量使用它的客户组织公平缓存?

Caching 如何在Cassandra集群中为大量使用它的客户组织公平缓存?,caching,cassandra,Caching,Cassandra,对于如何使用Cassandra为大量客户提供服务,是否有任何建议 假设他们都在Cassandra中读取行(每个客户特定)。如果我们有一个大列族(CF),那么每个CF将相应地有一个memtable。因此,读取数据频率较高的客户将替换读取频率较低的客户的缓存项。不同用户的服务质量(即读取速度)也会有所不同。这是不公平的(所有客户必须体验相同的性能) 为每个客户分配单独的CF是否正常(例如,5000 CF或更多)?据我所知,这将导致创建5000个memtables,这将导致公平缓存,因为每个客户将在单

对于如何使用Cassandra为大量客户提供服务,是否有任何建议

假设他们都在Cassandra中读取行(每个客户特定)。如果我们有一个大列族(CF),那么每个CF将相应地有一个memtable。因此,读取数据频率较高的客户将替换读取频率较低的客户的缓存项。不同用户的服务质量(即读取速度)也会有所不同。这是不公平的(所有客户必须体验相同的性能)

为每个客户分配单独的CF是否正常(例如,5000 CF或更多)?据我所知,这将导致创建5000个memtables,这将导致公平缓存,因为每个客户将在单独的缓存(memtable)中获得服务。我说得对吗


另一方面,大量CF的创建是否会降低性能,而不是单个大CF?

内存表不是缓存,它们是为了确保在磁盘上按顺序写入Cassandra。它们在执行查询时从中读取,但当它们太大时会刷新,而不是使用适合缓存的逐出策略


为每个客户提供单独的列系列将非常低效-1000个CFs太多了。最好是确保您的客户CF仍在缓存中。如果您有足够的内存,那么它会(假设您的Cassandra集群上没有其他CFs)。或者,您可以使用行缓存并将大小设置为足以容纳客户CF中的所有数据。

同样值得注意的是,这么多CF的内存成本将是可怕的。每个CF都需要一个堆分配,如果我记得的话,这大约是每个CF 4MB的标记。正如您所看到的,5000个CFs并不漂亮。谢谢Richard的回答。据我所知,Memtables不执行缓存功能。为了提高读取速度,我应该启用行缓存。我说的行缓存可以为每个大小不同的Cassandra节点设置,对吗?行缓存是否会导致最常读取的用户(例如Lady Gaga配置文件)出现问题。我的意思是,读到Lady Gaga将驱逐所有其他条目。那么,是否可以组织公平行缓存,或者我需要切分我的集群(将Lady Gaga移动到单独的集群)?也许Cassandra可以通过添加节点轻松解决这个问题?我的意思是,使用复制因子,例如3个Lady Gaga的条目将位于3个节点上,这就是为什么Gaga占用的行缓存将分布在集群中,这是一种公平的缓存解决方案。“只需添加群集节点”是否正确?您可以在每个节点上设置不同大小的行缓存,但不建议这样做。每个节点应完成大致相同的工作量。如果您的行缓存足够大,可以存储所有条目,那么您将不会遇到逐出问题。再次感谢!但是,如果节点的参数(如内存、磁盘等)不同,该怎么办。?我认为唯一的方法是在缓存上配置不同的设置。