如何打破一个持有100mil +记录数量的表?

时间:2010-12-30 10:18:30

标签: database-design

我们目前正在我们的配对网站为我们的客户存储52个预定义问题的答案。

我们拥有超过3000万的独特用户,总结了52x30百万行的最坏情况。在这52个问题中,有11个是必需的,并且总是得到回答。

我们之前的解决方案是为每个问题打开一个答案表。此解决方案分发了我们的答案行,以便更快地插入/删除/更新但它也给我们带来了非常规的编程,例如每次添加/更新问题时动态打开表格,或者如果要永久销毁答案表,则删除答案表。

我们希望为我们的第三个版本提供更好的解决方案但是还不能走得很远。

任何其他想法,也许是更传统的方式来实现这一目标?

3 个答案:

答案 0 :(得分:1)

为什么现在表现不好?你知道你是否受到IO约束或遭受短篇小说生活?在更改设计之前,您的公司需要确定您为什么会遇到不良后果。

我猜你的硬件是

  • 不到2 GB的SQL内存
  • 在托管SQL的服务器上运行其他应用程序
  • 有一个Raid 5托管你的数据库
  • 将日志文件放在与db
  • 相同的磁盘上
  • 将temp db与db
  • 放在同一个驱动器上

我猜你的SQL表有

  • 每列都没有索引或索引
  • 每列都是相同的数据类型 长度(varchar(256))
    • 允许每列中的null

最好的数据库设计是满足您的业务规则的设计。您的业​​务规则是否定义了报告系统或OLAP?业务规则是否为应用程序定义了SLA?

我的建议是聘请一家公司,该公司在识别糟糕的SQL性能方面有着良好的记录。首先实施他们的推荐,然后重新设计以满足您的SLA。如果知道如何使用SQL Server,那么SQL Server中的15亿行并不是很多,OLAP或报告。

我真的不希望这听起来很苛刻,但如果没有对应用程序的所有性能方面进行调查,任何建议都会浪费你的时间。

答案 1 :(得分:0)

我不确定您的问题是基于Windows还是Linux。

但是,您是否考虑过文档数据库ala nosql类似于RavenDB用于Windows,couchDB用于apache甚至是MongoDb

使用nosql解决方案有几个好处。

阅读this或Google了解nosql文档数据库的好处。

答案 2 :(得分:0)

我认为您无法轻松地将DB切换到XML DB。那么将模式拆分为3个表怎么样:

  1. QuestionaireMain = UID | Q1 | ... | Q11:持有所有必需的问题
  2. OptionalQuestion = QID | Desc:定义可选问题
  3. QuestionaireOptional = UID | QID | ANSWER:持有可选问题的答案
  4. 马丁。