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