我可以使用什么技术来存储数据

问题描述:

我有一个应用程序,我每0.1秒存储大约1k字节的数据。这是36MByte /小时,或大约600MByte /天。我可以使用什么技术来存储数据

数据是高度可压缩的,所以它应该压缩在10:1和100:1之间。所有数据都由时间戳记引用。

我的问题是:我可以用什么技术来存储这些数据?

约束:

  • 将数据插入到数据库不能随着数据库大小变大的时间。这个限制排除了Microsoft SQL Server(我们尝试了它,并且在5天后它停止了,因为每个“插入”都花了一分钟)。
  • 我们可以有效地暂停每天4小时的数据记录,这会让我们有时间做压缩等。
  • 我们希望与LINQ for .NET兼容,这意味着我们可能需要一个数据库一个LINQ适配器(一个MySQL风格的界面可以)。
+2

您的SQL服务器配置不正确。可以将其设置为无限期地插入一段时间。 – 2010-12-19 22:20:06

+1

插入时间超过一分钟? 99%的时间,这是查询问题,而不是数据库。尝试使用NOLOCK指定Insert,并确保如果插入的行中有索引,则插入的行将在索引的“结尾”处或附近的某处,而不是随机在中间。 – Juliet 2010-12-19 22:22:29

+1

我会重新评估是否需要使用Linq ...虽然我认为Linq很棒,而且我自己也使用它,但对于这样的事情,我会谨慎的鼓励客户端处理的编程方法(而不是服务器端处理)。 – Arafangion 2010-12-19 22:41:07

一种方法是简单地将传入数据附加到磁盘上的文件。一天之后,切换到一个新文件,然后产生一个进程来压缩和存储前一天的文件。

您似乎认为您需要将数据存储在数据库中,而没有说明原因。你做?

+0

我想要在数据库中的数据,所以我可以很容易地查询它。 LINQ查询非常有表现力,使事情变得更容易。 – Contango 2010-12-20 00:47:38

+0

如果您不需要立即使用当前的数据,那么您可以让后台进程执行实际插入数据库的操作。这样,您的在线日志记录根本不依赖于数据库。这将是更强大系统的一个方面。 – 2010-12-20 01:51:24

+0

如果没有并发编写器,这实际上是一个非常好的解决方案,可以很好地扩展。 – Ronnis 2010-12-20 16:37:59

如果你不能让SQL Server及时处理这么小的负载,那么我想知道如果你没有探究你如何插入数据,任何RDBMS都会对你有效。

你是否正在做一个非常简单的插入到一个没有其他索引/函数/进程阻塞/读取的表(带有主键)?或者说,这个过程实际上比这个简单/小插入更复杂一点?

如果你对使用Linq没有信心,你是否在分析你的linq语句以确保你没有告诉ORM做一些愚蠢的事情?

+0

我们正在做一个简单的插入。我会按照你的建议去做 - 分析我们的LINQ,确保我们没有做任何愚蠢的事情(比如使用“Orderby”强制整个表加载到内存中,以便它可以被分类)。 – Contango 2010-12-21 11:45:43

也许您可以将所有内容存储到二进制文件中,并将元数据存储到数据库中。