数百个列最适合使用哪个数据库?

时间:2017-03-19 19:36:15

标签: database cassandra amazon-redshift bigdata nosql

我们正在获得一个包含超过600列的庞大数据集,总大小为TB。我一直在为大多数导入作业使用redshift,但是我在导入总列大小超过一定限制的行时遇到了问题。我想到了几个选择。

  • 从随机UUID创建代理键。完全规范化表,因为许多列非常稀疏。问题是redshift实际上并不是为许多表之间的外键关系创建的。
  • 只导入看起来相关的字段,这是一个问题,因为业务将继续要求新字段,我需要重新处理整个数据集
  • 使用其他数据库,如Cassandra,Hive,Riak。但这些数据库不是更像关键值商店吗?

您可以分享解决此类问题的任何经验。

2 个答案:

答案 0 :(得分:1)

根据Amazon Redshift https://codereview.stackexchange.com/a/145076

  

<强>限制

     

您可以在单个表格中定义的最大列数 1,600

     

广泛的表格

     

具有固定宽度列的表格的最大宽度(例如CHAR)为64KB - 1(或 65535字节)。如果在表中包含VARCHAR列,则表可以具有更大的声明宽度而不返回错误,因为VARCHARS列不会将其完整声明的宽度提供给计算的查询处理限制。 VARCHAR列的有效查询处理限制将根据许多因素而变化。

     

如果表格太宽而无法插入或选择,您将收到以下错误:The combined length of columns processed in the SQL statement exceeded the query-processing limit of 65535 characters (pid:7627)

所以,你对 600列的渴望是相当不错的。您可能必须修改字段类型以保持在64KB行限制内。

答案 1 :(得分:1)

我认为,列数的限制并不是选择数据库的唯一原因。它更多地是关于用例和业务场景。
至于Cassandra,它允许在一个分区中拥有20亿个单元格(行x列)。但是,你是对的,Cassandra更像是超值商店。
Hive不是键值存储。想象一下,你将csv文件放在分布式文件系统中,能够并行处理多个csv文件。这都是关于Hive的。 Hive还为查询(HQL)提供类似SQL的语言,并部署在Hadoop基础结构中。
Hive有600列可以使用,甚至超过1K列。限制还取决于存储文件格式(ORC ot文本),它可能会导致OOM Riak也是一个关键价值,但我在这里没有多少经验。
无论如何,总而言之,应该根据用例选择数据库。