【问题标题】:What technique can I use to store data我可以使用什么技术来存储数据
【发布时间】:2011-05-27 23:48:11
【问题描述】:

我有一个应用程序,我每 0.1 秒存储大约 1kbyte 的数据。那是 36MByte/小时,或大约 600MByte/天。

数据是高度可压缩的,因此应该在 10:1 到 100:1 之间进行压缩。所有数据都以时间戳引用。

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

约束:

  • 将数据插入数据库的时间不能随着数据库大小的增大而增加。这个限制排除了 Microsoft SQL Server(我们尝试过,5 天后它停止了,因为每次“插入”都需要一分钟)。
  • 我们可以有效地每天暂停数据记录 4 小时,这样我们就有时间进行压缩等操作。
  • 我们希望与 .NET 的 LINQ 兼容,这意味着我们可能需要一个带有 LINQ 适配器的数据库(可以使用 MySQL 风格的接口)。

【问题讨论】:

  • 您的 SQL 服务器配置不正确。可以对其进行设置,以便插入无限期地花费恒定时间。
  • 插入时间超过一分钟? 99% 的时间,这是查询的问题,而不是数据库的问题。尝试使用 NOLOCK 指定 Insert,并确保如果要插入的行上有索引,则插入的行会位于索引的“末尾”或附近的某个位置,而不是随机位于中间。
  • 我会重新评估使用 Linq 的必要性......虽然我认为 Linq 很棒并且我自己使用它,但对于这样的事情,我会警惕鼓励客户端的编程方法处理(而不是服务器端处理)。
  • 您没有提到查询方面的任何要求。我希望您在存储数据后需要进行某种查询。如果您需要对存储的数据进行查询,那么将数据存储在普通文件中不是您的选择
  • @Juliet 和 @Greg Hewgill - 感谢您的提示,也许我们毕竟可以使用 Microsoft SQL。

标签: c# .net mysql linq database-design


【解决方案1】:

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

您似乎假设您需要将数据存储在数据库中,但没有说明原因。你呢?

【讨论】:

  • 我想将数据保存在数据库中,以便轻松查询。 LINQ 查询非常有表现力,让事情变得更容易。
  • 如果您不需要立即获得今天的数据,那么您可以让后台进程也执行实际插入数据库的操作。这样,您的在线日志记录就完全不依赖于数据库。这将是更强大系统的一个方面。
  • 如果没有并发写入者,这实际上是一个非常好的解决方案,可以很好地扩展。
【解决方案2】:

如果您无法让 SQL Server 及时处理这么小的负载,那么我想知道如果您不探索如何插入数据,是否有任何 RDBMS 对您有效。

您是否只是在没有其他索引/功能/进程阻塞/读取的单个表(带有主键)中进行非常简单的插入?或者这个过程实际上比你所说的这个简单/小插入要复杂一些?

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

【讨论】:

  • 我们正在做一个简单的插入。我会按照你的建议做 - 分析我们的 LINQ 以确保我们没有做任何愚蠢的事情(比如使用“Orderby”强制将整个表加载到内存中以便对其进行排序)。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 2014-04-23
    • 1970-01-01
    相关资源
    最近更新 更多