在 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];
  1. 任何人都可以建议我可以为 BUCKETSCOLUMN_MAX_DELTA_ROWS 等选项设置的参数,这些参数可以提高 OLAP 查询的性能。

  2. 我可以在创建后为 table 设置这些选项吗?

例如:就像在 SQL 中一样,我们可以使用 ALTER 为 table 设置额外的选项,如下所示:

ALTER TABLE t ENGINE = InnoDB;

编辑:我们正在执行批量插入,每个插入 200 万个。虽然每个批次都以 DF 的形式从 json 插入到 table,但它像消耗水一样消耗 RAM。我们的问题是 snappy 使用过多的 RAM。

  1. 对于大多数用例,默认值应该可以正常工作。只有当你有很多 'cores' 时,你才可以尝试增加 BUCKETS 的数量,以便正确利用 cpus。

遵循 optimizing query latency

的指南
  1. 我们暂时不支持更改额外选项。

如果您想减少内存消耗,请使用 COLUMN table。您可以尝试在启动服务器时减小堆大小。请参阅 estimating memory requirements.

这些参数对你有帮助:-heap-size='memory allocation', -critical-heap-percentage=90 -eviction-heap-percentage=81