5

我正在一个项目中工作,该项目必须在缓存中维护大量记录(Apache Ignite),这些记录由公司划分。

前任:

公司; 产品; 数量

比较;一个; 15

比较;乙; 10

补偿;一个; 20

补偿;乙; 12

我的疑问是在同一缓存中创建条目与键(公司+产品)附加租户之间的性能,并为每个租户创建一个新缓存,例如:

CacheConfiguration<String, String> cfgCompanyA = new CacheConfiguration<>();
cfgCompanyA.setName("CompanyA");
IgniteCache<String, String> cacheCompanyA = ignite.getOrCreateCache(cfgCompanyA);

CacheConfiguration<String, String> cfgCompanyB = new CacheConfiguration<>();
cfgCompanyB.setName("CompanyB");
IgniteCache<String, String> cacheCompanyB = ignite.getOrCreateCache(cfgCompanyB);
4

3 回答 3

5

我建议为每个租户创建单独的缓存。这两种方法的性能应该没有区别,但是数据会更好地相互隔离,这将简化代码。

于 2016-04-30T06:02:33.607 回答
1

这取决于您的要求。我不是 Apache Ignite 专家,所以我将在一般层面上解决这个问题。

单独缓存的参数:

  • 访问更高效,key中没有租户
  • 一个租户的缓存和处理可以位于同一位置,并且更容易移动
  • 缓存配置是每个客户端的,这使您可以控制每个客户端的保证延迟和资源使用情况

反对单独缓存的论点:

  • 共享缓存总体上为您提供可控和最佳的资源使用。如果您为租户提供单独的缓存,即使租户几个月没有使用您的应用程序,缓存也可能会耗尽资源
  • 如果要动态添加租户,则需要提出一个概念来管理所有缓存配置

一个很好的选择是使用两者的混合物:

  • 将租户一直放在缓存键中
  • 实现一个可以获取每个租户数据的缓存池
  • 允许多个缓存池以及将缓存池分配给租户的能力

这使您可以:

  • 即使有多个租户,也有一个用于开发和(单元)测试的缓存池。简化开发设置。
  • 将高容量租户分配给独占缓存池
  • 将低容量租户分配给共享缓存池,优化资源使用
  • 新租户从共享池中开始,或者您可能拥有具有其他资源限制的“免费增值”和“试用”池。
  • 低容量租户可以在不更改缓存配置的情况下进出
于 2016-04-30T08:59:53.607 回答
0

我用这段代码(scala)做了一些测试:https ://github.com/neoramon/scala-ignite-muiti-tenant 有了更多的 100k 记录,租户开始更有效地使用缓存。

机器配备:4 核,8 RAM(堆 4GB)SSD。

于 2016-05-01T16:27:20.770 回答