【问题标题】:MemSQL - performance implications of large numbers of databasesMemSQL - 大量数据库的性能影响
【发布时间】:2016-03-09 19:18:12
【问题描述】:

我正在寻找有关在 MemSQL 中创建大量数据库的任何影响的指导。

我的用例要求我的应用程序中的每个用户都可以访问 n 个表。一种选择是为每个用户创建一个数据库(以便使用“SHOW TABLES”列出表等很简单,这也是管理和安全性的良好抽象层)。选项 2 是拥有一个包含所有用户和表的单一数据库,但这会增加控制逻辑的复杂性。

问题:

采用多数据库方法而不是单个数据库对性能有何影响(如果有)?

感谢任何指导。

【问题讨论】:

    标签: database-design singlestore


    【解决方案1】:

    memsql 中的每个数据库都有自己的事务缓冲区,大小由memsql.cnf 中的transaction-buffer 变量设置。对于单框,默认大小为 128m,即每个新数据库将额外消耗 128 兆字节的 RAM。这对您可以创建的数据库数量施加了硬性限制:您拥有多少 RAM。

    在分布式 memsql 中,聚合器和叶节点默认使用每个数据库 64m。但是,叶子每个分区有一个数据库,每个叶子通常每个 CPU 内核有一个分区。这意味着在 memsql 集群上创建的每个数据库将在每个叶子上默认使用 CORES * 64m,例如8 核叶节点上每个数据库 512m。

    如果要创建大量数据库,则必须减小事务缓冲区的大小。该缓冲区用于写入,因此除非您的写入工作负载高度并发或创建大量事务,否则降低该默认值是安全的。

    对于您的用例,如果您希望在任何给定时间只有一小部分用户写入他们的数据库,那么如果他们每个人都有自己的数据库,那么大部分事务缓冲区空间将是空闲的。将所有用户放在一个数据库中可以让他们共享事务缓冲区,减少内存浪费。

    【讨论】:

    • 感谢@Peter Fairman - 这确实很有帮助;正是我所追求的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 2011-11-08
    • 1970-01-01
    相关资源
    最近更新 更多