计算问题的最佳数据库

时间:2010-01-04 04:54:39

标签: sql database

我正在尝试确定用于存储相对静态但需要以多种不同(运行时指定)方式计算的信息的数据库系统。数据的基本轮廓是美国国会的投票:

账单:

  • 有很多点名通话
  • 有一个名称和其他短元数据
  • 包含文字和其他可能很长的元数据
  • 具有状态(已通过,失败,正在进行中)

点名:

  • 有一个日期
  • 有很多选票
  • 有状态(通过,失败)

投票:

  • 属于国会议员
  • 有一种(aye,nay,present,not voting)

国会议员:

  • 有一个名称(以及其他短元数据)
  • 有很多期间

一段时间:

  • 有一个开始和结束日期
  • 有一个政党(民主党人,共和党人,其他人)
  • 有一个职位(国会议员,委员会主席,议长等)

我希望能够轻松构建如下的查询:

  • 对于X,Y和Z唱名表决,请告诉我“民主党”的立场和“共和党”的立场。然后,在国会中对国会议员进行排名,这些选票是由他们对这些职位的忠诚所持有的。
  • 对于失败的X账单,请告诉我最接近的点名。然后,告诉我多数党的哪些成员叛逃以产生这些失败。
  • 对于X法案通过,但被多数党反对,请告诉我哪些多数成员叛逃生成该段落。

我将拥有这些有限数量的查询类型,但会动态生成所涉及的账单,唱名表决,政党等。

底层数据的最佳存储机制是什么,它允许我动态地尽可能地发出这些查询?

5 个答案:

答案 0 :(得分:4)

这看起来像是非常标准的关系数据给我。任何RDBMS(MySQL,SqlServer,postgres等)都可以。

或者您是否就如何制作表格来存储这些数据提出建议?

答案 1 :(得分:3)

你可以使用任何数据库,直到我读到:

  

...排名国会议员......

MySQL没有任何排名功能。我不清楚Postgres的排名支持,但Oracle和SQL Server已经支持排名一段时间了(Oracle 9i +,SQL Server 2005+)。他们都提供免费版本。

答案 2 :(得分:2)

存储机制?任何主流数据库都应该能够处理您所描述的场景。对我来说看起来很标准。

答案 3 :(得分:1)

正如其他人所说 - 任何关系数据库都可以支持一个简单的模型来解决这个问题。但是,还有一些其他考虑因素:

  • 这是一个分析性而非交易性的应用程序,商业数据库目前在分析方面更强大 - 因为更成熟的优化器,更强大的sql功能,对并行性的更大支持,物化查询,对汇总表的自动查询重写等。 / LI>
  • 如果你只是坚持美国国会并且不决定也支持州议会,也不决定增加一百年的历史数据(所有有用的要求),那么几乎任何流行的关系数据库都可以处理性能问题。但是如果你决定进入州级别,那么我首先会考虑商业数据库。
  • 在开源数据库中,我认为postgresql的分析功能是最成熟的。

答案 4 :(得分:0)

这里我通常会说,使用CouchDB或其他一些无架构的NOSQL数据库。但问题规范的方式很好地为关系商店奠定了基础。此外,没有非常大量的数据需要分布式处理la mapreduce。

话虽如此,如果问题框架有点不同,没有初始关系偏差(你已经处于数据设计模式:)),那么像CouchDB这样的系统可以工作。根据要执行的分析,更加以文档为中心的方法可能会有所帮助,因为分析所需的所有信息都存在于每个文档中(非规范化)并且可以避免昂贵的连接。

每个账单可能是这些文档中的一个(在CouchDB的情况下为json),而周期为子属性/等等的rollcalls / votes / congress成员都在一个'账单'文档中。然后,您可以对执行查询的所有“账单”文档进行mapreduce。根据查询要求,不同的面向文档的设计可能有意义。

随着数据集的增长,您不必担心大小/性能,因为您始终可以使用更多服务器来执行mapreduce查询并分配负载。此外,无模式意味着文档可以随着应用程序的更改而更改,而无需昂贵的rdbms表锁定。但同样,这个数据集并没有经常发生变化,也不是很大。