Cassandra 数据库设计 - 1000 列或动态创建的表

Cassandra database design - 1000 columns or dynamically created tables

我想听听您对广告代理数据库的潜在解决方案的建议。

我们希望构建一个能够以我们知道的方式跟踪用户的系统 他们在广告上做了什么,在哪里。

广告的种类很多,有的还是FORMS,方便用户填写数据。 每个表单都不同,但我们不想为每个表单创建 table。

我们想创建一个非常宽的 table,有 1k 列,每种类型有几十个,并存储数据。

简而言之:

  1. 使用 Cassandra;
  2. 每天创建 table 秒,以便每天 table 存储数据;
  3. 每个 table 将有 1000 列(日期时间 100,整数 100,等等)。

应用程序逻辑会将数据映射到相关的列中,以便我们稍后能够搜索和更新它们。

你怎么看这个?

在 Cassandra 中动态生成 table 时要小心。当 table 太多时,您将开始遇到问题,因为每个 table 存在内存开销。每 Jonathan Ellis:

Cassandra will reserve a minimum of 1MB for each CF's memtable: http://www.datastax.com/dev/blog/whats-new-in-cassandra-1-0-performance

在 Cassandra 中,即使每天 tables 也不是一个好主意(每个表单 tables 更糟糕)。我建议您构建一个 table 可以容纳您的所有数据,并且您知道它可以很好地扩展 - 使用 cassandra-stress 验证这一点。

此时,听从 mikea 的建议并开始考虑您的访问模式(参见 Patrick 的 video series),您可能需要构建额外的 table 来满足您的查询需求。

注意: 对于希望在 c* 中使用无模式选项的任何人: https://blog.compose.io/schema-less-is-usually-a-lie/ http://rustyrazorblade.com/2014/07/the-myth-of-schema-less/