我正在寻找关于在MemSQL中创建大量数据库的任何影响的一些指导。
我的用例要求我的应用程序中的每个用户都可以访问n个表。一种选择是为每个用户创建一个数据库(因此列表表等使用“SHOW TABLES”很简单,也是管理和安全性的良好抽象层)。选项2是包含所有用户和表的单个数据库,但这会增加控制逻辑的复杂性。
问题:
使用多个数据库方法而不是单个数据库有什么性能影响(如果有的话)?
感谢任何指导。
答案 0 :(得分:3)
memsql中的每个数据库都有自己的事务缓冲区,其大小由transaction-buffer
中的memsql.cnf
变量设置。对于单个框,默认大小为128m,即每个新数据库将消耗额外的128兆字节的RAM。这对您可以创建的数据库数量设置了一个硬性限制:您拥有多少RAM。
在分布式memsql中,默认情况下聚合器和叶子节点每个数据库使用64m。但是,叶子每个分区有一个数据库,每个叶子通常每个CPU核心有一个分区。这意味着在memsql集群上创建的每个数据库默认情况下会在每个叶子上使用CORES * 64m,例如: 8核叶节点上每个数据库512米。
如果要创建大量数据库,则必须降低事务缓冲区的大小。该缓冲区用于写入,因此除非您的写入工作负载高度并发或创建大量事务,否则可以安全地降低该默认值。
对于您的用例,如果您希望在任何给定时间只有一小部分用户写入其数据库,那么如果每个用户都拥有自己的数据库,那么很多事务缓冲区空间将处于空闲状态。将所有用户放在一个数据库中将让他们共享事务缓冲区,从而减少浪费的内存。