设计包含大量新数据的数据库

时间:2011-01-15 21:52:57

标签: sql sql-server database

我是数据库设计的新手,需要一些指导。 全天都会向我的数据库中插入大量新数据。 (每天100k行) 插入后,数据永远不会被修改或删除。 如何针对检索速度优化此数据库?

我的想法

  • 创建两个数据库(可能在不同的硬盘上),并在流量较低的晚上合并两个
  • 创建一些特殊索引......

非常感谢您的推荐。

更新: 我的数据库只有一个表。

3 个答案:

答案 0 :(得分:2)

100k /天实际上相当低。 3M /月,40M /年。您可以存储10年存档,但不能达到1B行。

在您的设计中最重要的选择是群集密钥。您需要确保它们很窄并且可以提供应用程序通常使用的所有查询。任何将在表扫描中结束的查询都将通过获取整个表来完全丢弃您的内存。所以,没有惊喜,你的设计中的驱动因素是你将拥有的实际负载:你将运行什么样的查询。

任何高插入率的常见问题(更常被忽略)是最终必须删除插入的每一行。不承认这是一个白日梦。正确的策略取决于很多因素,但最好的选择是滑动窗口分区方案。见How to Implement an Automatic Sliding Window in a Partitioned Table。这不是一个事后的想法,如何删除数据的选择将渗透到您的设计的每个方面,并且您现在最好开始制定策略。

答案 1 :(得分:0)

我能给出的所有大型网站用来加速网站的最佳提示是:

CACHE CACHE CACHE

使用redis / memcached来缓存您的数据!因为内存(非常快)并且光盘I / O很昂贵。

队列写

另外,为了获得额外的性能,您可以在将内容写入光盘之前将内存中的写入排队一段时间 - >将它们写入SQL数据库。当然,如果您将数据保存在内存中并且计算机崩溃或出现电源故障,那么您将面临丢失数据的风险

缺少上下文

我也不认为你给了我们太多的背景!

我认为缺少的是:

  1. 架构。
    1. 你有什么样的服务器进行VPS /共享托管。
    2. 它有什么样的操作系统linux / windows / macosx
    3. 计算机细节,例如可用内存,cpu等。
  2. 发现你对数据的定义有点模糊。你能不能附上一个图表或一些解释你的域名的东西。例如alt text

    之类的内容

    使用http://yuml.me/

答案 2 :(得分:0)

您的要求是一般的。对于MS SQL服务器100k(或多或少“正常”)记录每天不应该是一个问题,如果你有合适的硬件。显然,您希望快速编写数据库,但要求优化检索性能。这不太匹配! ;-)调整数据库本身就是一项特殊技能。所以你永远不会得到你想要的一般答案。