如何在数据库中有效地存储大量行

时间:2011-03-03 17:59:37

标签: language-agnostic rdbms sql-server-ce

在数据库中存储大量数据的最佳方法是什么? 我需要存储带有时间戳的各种环境传感器的值。 我已经用SQLCE完成了一些基准测试,它适用于几十万行,但如果它达到数百万,则选择将变得非常慢。 我的实际表格:

Datapoint:[DatastreamID:int, Timestamp:datetime, Value:float]  
Datastream: [ID:int{unique index}, Uint:nvarchar, Tag:nvarchar]

如果我查询特定Datastream的数据点和日期范围,则需要很长时间。特别是如果我在嵌入式WindowsCE设备上运行它。这是主要问题。在我的开发机器上,查询占用了〜1sek,但在CE设备上耗时约为5分钟

每5分钟我记录20个传感器,每小时12个* 24小时* 365天= 105,120 * 20个传感器=每年2,102,400(行)

但它可能是更多传感器!

我考虑过某种web服务后端,但设备可能并不总是连接到互联网/服务器。

数据必须能够在设备上显示。

我怎样才能加快速度?选择其他表格布局,使用其他数据库(sqlite)?目前我使用.netcf20和SQLCE3.5

一些建议?

4 个答案:

答案 0 :(得分:2)

我确定任何关系数据库都能满足您的需求。 SQL Server,Oracle等。重要的是创建好的索引,以便您的查询高效。如果你只是为了查找单个记录而进行表扫描,那么无论你使用哪个数据库,它都会很慢。

如果您总是发现自己要查询特定的DataStreamID和Timestamp值,请为其创建索引。这样它就可以进行索引搜索而不是扫描。

答案 1 :(得分:0)

快速访问的关键是使用一个或多个索引。

一年200万行的数据库非常易于管理。

添加索引会在某种程度上减慢INSERTS的速度,但是您的数据不会很快进入,所以它不应该是一个问题。如果数据速度更快,您可能需要更加小心,但为了成为一个问题,它必须以比现在快得多的速度提供更多的数据。

您是否可以访问SQL Server,甚至MySQL?

答案 2 :(得分:0)

您的设计必须包含以下内容:   表中的主键。整数PK更快。

您需要分析您的选择查询以查看场景背后的情况。 选择必须执行SEEK而不是扫描

如果100K变慢,你必须通过分析器查看查询。

如果您有100M行而不是100K行

,它可能会变慢

希望这有帮助

答案 3 :(得分:0)

您可以使用SQL Server Express Edition吗?您可以像在完整版中一样在其上创建索引。我已经使用SQL Server中超过1亿行的数据库就好了。 SQL Server Express Edition将数据库大小限制为10 GB,只要可以,那么免费的应该适合您。

http://www.microsoft.com/express/Database/