sql - 即使在 VoltDB 中分区后也无法上传数据

标签 sql database voltdb

我们试图在 2 台主机服务器上上传 80 GB 的数据,每台主机服务器都有 48 GB RAM(总共 96GB)。我们也有分区表。但即使分区后,我们最多也只能上传 10 GB 的数据。在 VMC 界面中,我们检查了尺寸工作表。表中的行数为 40,00,00,000,表的最大大小为 1053,200,000k,最小大小为 98,000,000K。那么,分区后上传 80GB 有什么问题?这个表的大小是多少?

最佳答案

大小工作表根据表的架构提供行数将占用的内存中的最小和最大大小。如果您有 VARCHAR 或 VARBINARY 列,则 min 和 max 之间的差异可能非常大,并且您的实际内存使用通常介于两者之间,但可能很难预测,因为它取决于您加载的字符串的实际大小.

但我认为问题在于根据工作表,最小大小为 98GB,这意味着如果任何可空字符串为空,或者任何非空字符串都将为空字符串。即使不考虑堆大小和任何开销,这也高于您的 96GB 容量。

您的 kfactor 设置是什么?如果为0,则每条记录只有一份。如果它是 1,则每条记录将有两个副本,因此在该配置中您确实至少需要 196GB。

RAM 中每条记录的大小取决于所选的数据类型以及是否有任何索引。此外,超过 15 个字符或 63 字节的 VARCHAR 值存储在池内存中,这比固定宽度存储带来更多开销,但如果值小于最大大小,它可以减少空间浪费。

如果您需要一些关于如何最小化内存中每条记录大小的建议,请分享您的表和任何索引的定义,我可能会建议可以减少大小的调整。

您可以向集群添加更多节点,或使用具有更多 RAM 的服务器来增加容量。

免责声明:我为 VoltDB 工作。

关于sql - 即使在 VoltDB 中分区后也无法上传数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47036076/

相关文章:

mysql - 如何选择数据并获得层次结构结果

MySQL 将行转为动态数量的列

php - 向所有用户公开 SQL SELECT 查询功能 : setting timeouts and limiting keywords. 这可以安全地完成吗?

sql - 我将如何从每列中删除空值

voltdb - VoltDB 中的连接池

mysql - SQL UNION 语句位于彼此之下

mysql - mysql表分组时检索最后一条记录

python - 如何关闭 PostgreSQL 数据库上的空闲连接

php - 窗口上的 voltDB

apache-kafka - 将数据从 volt 导出到 kafka