【问题标题】:Set the right partitions for Crate Database为 Crate 数据库设置正确的分区
【发布时间】:2017-04-28 17:22:18
【问题描述】:

我正在为 Database CrateDB 建模。
我有一个平均值。 400 个客户,每天产生不同数量的时间序列数据。 (介于 5K 和 500K 之间;平均约为 15K)

稍后我应该能够按 customer_year_month 和 per customer_year_calendar_week 查询。 这意味着我只会查询间隔:

  • 和月份

现在我在问自己如何分区这个表?

我会按客户和年份分配
这有意义吗?
还是按客户、年份和月份进行分区会更好?

【问题讨论】:

  • 您在考虑哪种分区?哈希、范围、列表?哪个关系型数据库?您会查询单个值或间隔吗?您的目标是并行化大查询还是尽量减少小查询的磁盘访问 - 这取决于您的硬件和/或业务需求?
  • 我在想partioning of crateDB。我将只查询提到的间隔。
  • 很抱歉,我不知道 CrateDB 我认为这是 Create 的错误类型!从理论上讲,我会在客户日期(日级别)上选择一个哈希范围分区子分区方案。日级别将处理月和周情况,但您必须在 WHERE 子句中小心地将月/周间隔转换为日间隔。但是我还是不知道这个 DBMS(感谢你,我现在知道了)。
  • @ydarma 谢谢。 Google 经常遇到同样的问题(“您的意思是 Create DB”)。好吧,我不确定在多个分区上执行查询会有多昂贵,而且我在 CrateDB 的网站上没有找到任何相关信息。

标签: database partition crate


【解决方案1】:

所以分区表的问题是相当复杂的,应该考虑很多事情。其中:

  • 应该运行哪些查询?
  • 数据的插入方式
  • 可用的硬件资源
  • 集群大小

从本质上讲,每个分区还会通过乘以分片计数来产生开销(一个分区可以被视为基于列值的“子表”),如果选择不当 - 会严重影响性能。 因此,在您的情况下,每天 15k 插入并不算多,但是插入的分布可能会导致问题,每天以 500k 插入增长的客户分区将比 5k 人更早遇到性能问题。因此,我只会使用每周分区。

create table "customer-logging" (
    customer_id long, 
    log string, 
    ts timestamp, 
    week as date_trunc('week', ts)
) partitioned by (week) into 8 shards

如果您有适当数量的 CPU 内核,请仅使用 8 个分片;)

文档:date_trunc()partitioned tables

理想情况下,您可以尝试几种不同的组合并找到最适合您的组合。我们的sys tables 提供了对分片大小和位置的洞察,因此您可以查看是否存在导致节点过载的特别胖分片;)

干杯,克劳斯

【讨论】:

    猜你喜欢
    • 2013-11-16
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 2017-05-04
    • 2020-06-06
    相关资源
    最近更新 更多