【发布时间】:2011-06-28 18:03:14
【问题描述】:
我正在为微阵列数据构建一个数据库。每个患者样本都有超过 1,000,000 个特征,我想将患者样本作为行存储在 SQL 表中,每个特征作为一列。
HuEX Microarray Data
+----+----------+----------+-----+------------------+
| ID | Feature1 | Feature2 | ... | Feature1,000,000 |
+----+----------+----------+-----+------------------+
| 1 | 2.3543 | 10.5454 | ... | 5.34333 |
| 2 | 13.4312 | 1.3432 | ... | 40.23422 |
+----+----------+----------+-----+------------------+
我知道大多数关系数据库系统对表中的列数都有限制。
+------------+-----------------+
| DBMS | Max Table Col # |
+------------+-----------------+
| SQL Server | 1,024 - 30,000 |
| MySQL | 65,535 bytes |
| PostgreSQL | 250 - 1,600 |
| Oracle | 1,000 |
+------------+-----------------+
显然,这些限制对于我的任务来说太低了。是否有办法增加 SQL 数据库表可以拥有的列数,或者是否有其他 DBMS 可以处理如此大量的表列?
更新
请注意,所有列都将具有所有行的值。
【问题讨论】:
-
您是否真的收集了每个患者的一百万个数据点,或者更像是可能的 100 万个数据点中的几百个
-
Cassandra 就是你要找的东西
-
@Conrad,我正在研究人类表达微阵列,每个阵列(芯片)有超过一百万个探针组。这有点技术性,但基本上这意味着我们的样本有超过 100 万个特征都具有值(数字双精度)。
-
@Nixuz 如果不是稀疏数据(我原来是这么认为的!),也许只是将数据存储在适当的去规范化形式中,具体取决于准确的访问要求。例如。单个 blob、按块范围的 blob、XML(可以在某些 DB 中查询、fsvo 查询)、预提取的统计信息等。此外,由于这非常专业,RDBMS 可能不是是最好的存储它的方式——同样,取决于访问要求。
-
@Nixuz 我认为不一定会有简单的方法——我会先确定所需的访问/查询用例,然后看看如何以最少的数量实现它痛苦;-) 混合可能会将每个结果拆分为多个记录,例如 1000 个同质值以及段号。 (每个 CPU 只生成一个 1000 条记录,而不是 1000000 条记录,并且应该是相对可查询的——也只包括段号。)