什么是我需要的最佳数据库?

时间:2010-03-24 11:59:40

标签: database relational-database non-relational-database

我目前正在使用MS SQL Server 2008,但我不确定它是否是针对此特定任务的最佳系统。

我有一个这样的表:

PK_ptA PK_ptB DateInserted LookupColA LookupColB ... LookupColF DataCol (ntext)

常见的查询是

SELECT TOP(1000000) DataCol FROM table 
WHERE LookupColA=x AND LookupColD=y AND LookupColE=z
ORDER BY DateInserted DESC 

该表有大约10亿行,每天插入500万行。

我对SQL Server的主要问题是分片或展开数据文件并不容易。此外,出口似乎最大速度为每秒1000次(约1MB / s),这似乎非常缓慢。

我遇到的另一个问题是,对于SQL Server,如果我想添加一个新的LookupCol,日志文件会大量增加,需要大量很少使用的可用空间。

对于这个问题,有没有明显更好的解决方案?

2 个答案:

答案 0 :(得分:3)

您遇到了问题,而且不是SQL Server。让我也忽略你似乎有一个糟糕的桌面设计。

  • 传播数据文件实际上非常简单。稍后重组不是那么容易,但也是可行的。你的表,文件组和文件布局如何?
  • 每秒输出1mb是一个笑话。认真。我在几分钟内处理了1.5亿行文件 - 每分钟运行量超过60,000行。有些东西吓坏了。临时空间?你做过性能分析吗?硬件如何看?
  • 对于日志使用没有任何作用。与大多数专业数据库一样,日志包含事务期间所有已更改的数据库页面。添加字段更改 - 所有页面。

你应该:

  • 重新设计数据库(如果你愿意的话,使用视图来保持相同的旧表),这样它就不会“LookupColA”等,而是规范化(LookupValue,以及由“列”编码的LookuPTable “)。这样您就可以获得即时附加字段。这将变成像星型模式一样的数据仓库。
  • 进行性能分析。看起来你有些问题。
  • 绝对告诉我们你的硬件;)

这里的问题绝对不是SQL Server,它与糟糕的表设计有关 - 可能 - 不充分 - 使用不当的硬件。

答案 1 :(得分:0)

好的,表设计(单独回答)。 Lokup是低音查找表。

...所以

  • LookupTable中
  • pk(int)
  • TABLETYPE
  • 值 作为vields

  • ValueTable

  • PK

  • ValueLookupMap表

  • pk of ValueTable条目
  • pk of LookupTable条目

所以,基本上,如果你添加一个查找“字段”,那么你只需在LookupTable中创建一组条目,然后在ValueLookupMap中添加条目。