0

我有 3300 万条记录要插入到 Snappydata 数据库中。我已经尝试创建一个列表而不设置其选项。问题是 spark 正在将整个数据库加载到 RAM 中。我想设置列选项,以便获得更快的统计计数。

根据参考资料,这是我们创建表的方式:

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. 谁能建议我可以为诸如等选项设置的参数,这些参数BUCKETS可以COLUMN_MAX_DELTA_ROWS提高 OLAP 查询的性能。

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

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

ALTER TABLE t ENGINE = InnoDB;

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

4

1 回答 1

1
  1. 对于大多数用例,默认值应该可以正常工作。只有当你有很多“核心”时,你才能尝试增加存储桶的数量,以便正确利用 CPU。

遵循优化查询延迟的准则

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

如果要减少内存消耗,请使用 COLUMN 表。您可以尝试在启动服务器时减小堆大小。请参阅估计内存需求。

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

于 2017-11-09T06:02:18.697 回答