在 SnappyData 中为大数据集创建一个 table
Create a table in SnappyData for large data set
我有 3300 万条记录要插入到 Snappydata 数据库中。我已经尝试在不设置其选项的情况下创建一个列 table。问题是 spark 正在将整个数据库加载到 RAM 中。我想设置列选项,以便获得更快的统计计数。
根据参考,这就是我们创建 tables 的方式:
CREATE TABLE [IF NOT EXISTS] table_name {
( column-definition [ , column-definition ] * )
}
USING row | column
OPTIONS (
COLOCATE_WITH 'table-name', // Default none
PARTITION_BY 'column-name', // If not specified it will be a replicated table.
BUCKETS 'num-partitions', // Default 128. Must be an integer.
REDUNDANCY 'num-of-copies' , // Must be an integer
EVICTION_BY 'LRUMEMSIZE integer-constant | LRUCOUNT interger-constant | LRUHEAPPERCENT',
PERSISTENCE 'ASYNCHRONOUS | ASYNC | SYNCHRONOUS | SYNC | NONE’,
DISKSTORE 'DISKSTORE_NAME', //empty string maps to default diskstore
OVERFLOW 'true | false', // specifies the action to be executed upon eviction event
EXPIRE 'time_to_live_in_seconds',
COLUMN_BATCH_SIZE 'column-batch-size-in-bytes', // Must be an integer. Only for column table.
COLUMN_MAX_DELTA_ROWS 'number-of-rows-in-each-bucket', // Must be an integer. Only for column table.
)
[AS select_statement];
任何人都可以建议我可以为 BUCKETS
、COLUMN_MAX_DELTA_ROWS
等选项设置的参数,这些参数可以提高 OLAP 查询的性能。
我可以在创建后为 table 设置这些选项吗?
例如:就像在 SQL 中一样,我们可以使用 ALTER 为 table 设置额外的选项,如下所示:
ALTER TABLE t ENGINE = InnoDB;
编辑:我们正在执行批量插入,每个插入 200 万个。虽然每个批次都以 DF 的形式从 json 插入到 table,但它像消耗水一样消耗 RAM。我们的问题是 snappy 使用过多的 RAM。
- 对于大多数用例,默认值应该可以正常工作。只有当你有很多 'cores' 时,你才可以尝试增加 BUCKETS 的数量,以便正确利用 cpus。
的指南
- 我们暂时不支持更改额外选项。
如果您想减少内存消耗,请使用 COLUMN table。您可以尝试在启动服务器时减小堆大小。请参阅 estimating memory requirements.
这些参数对你有帮助:-heap-size='memory allocation', -critical-heap-percentage=90 -eviction-heap-percentage=81
我有 3300 万条记录要插入到 Snappydata 数据库中。我已经尝试在不设置其选项的情况下创建一个列 table。问题是 spark 正在将整个数据库加载到 RAM 中。我想设置列选项,以便获得更快的统计计数。
根据参考,这就是我们创建 tables 的方式:
CREATE TABLE [IF NOT EXISTS] table_name {
( column-definition [ , column-definition ] * )
}
USING row | column
OPTIONS (
COLOCATE_WITH 'table-name', // Default none
PARTITION_BY 'column-name', // If not specified it will be a replicated table.
BUCKETS 'num-partitions', // Default 128. Must be an integer.
REDUNDANCY 'num-of-copies' , // Must be an integer
EVICTION_BY 'LRUMEMSIZE integer-constant | LRUCOUNT interger-constant | LRUHEAPPERCENT',
PERSISTENCE 'ASYNCHRONOUS | ASYNC | SYNCHRONOUS | SYNC | NONE’,
DISKSTORE 'DISKSTORE_NAME', //empty string maps to default diskstore
OVERFLOW 'true | false', // specifies the action to be executed upon eviction event
EXPIRE 'time_to_live_in_seconds',
COLUMN_BATCH_SIZE 'column-batch-size-in-bytes', // Must be an integer. Only for column table.
COLUMN_MAX_DELTA_ROWS 'number-of-rows-in-each-bucket', // Must be an integer. Only for column table.
)
[AS select_statement];
任何人都可以建议我可以为
BUCKETS
、COLUMN_MAX_DELTA_ROWS
等选项设置的参数,这些参数可以提高 OLAP 查询的性能。我可以在创建后为 table 设置这些选项吗?
例如:就像在 SQL 中一样,我们可以使用 ALTER 为 table 设置额外的选项,如下所示:
ALTER TABLE t ENGINE = InnoDB;
编辑:我们正在执行批量插入,每个插入 200 万个。虽然每个批次都以 DF 的形式从 json 插入到 table,但它像消耗水一样消耗 RAM。我们的问题是 snappy 使用过多的 RAM。
- 对于大多数用例,默认值应该可以正常工作。只有当你有很多 'cores' 时,你才可以尝试增加 BUCKETS 的数量,以便正确利用 cpus。
- 我们暂时不支持更改额外选项。
如果您想减少内存消耗,请使用 COLUMN table。您可以尝试在启动服务器时减小堆大小。请参阅 estimating memory requirements.
这些参数对你有帮助:-heap-size='memory allocation', -critical-heap-percentage=90 -eviction-heap-percentage=81