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