在SnappyData中为大型数据集创建一个表

时间:2017-11-08 04:39:50

标签: snappydata

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

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

  3. 例如:与SQL一样,我们可以使用ALTER为下面的表设置额外的选项:

    ALTER TABLE t ENGINE = InnoDB;

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

1 个答案:

答案 0 :(得分:1)

  1. 对于大多数用例,默认应该可以正常工作。只有当你拥有很多核心时才会这样做。然后你可以尝试增加BUCKETS的数量,以便正确使用cpu。
  2. 遵循optimizing query latency

    的指南
    1. 我们现在不支持改变额外选项。
    2. 如果要减少内存消耗,请使用COLUMN表。您可以尝试在启动服务器时减小堆大小。请参阅estimating memory requirements.

      这些参数对您有所帮助: -heap-size =&#39;内存分配&#39;,-critical-heap-percentage = 90 -eviction-heap-percentage = 81 < / p>