在数据库中存储大量数据的最佳方法是什么? 我需要存储带有时间戳的各种环境传感器的值。 我已经用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
一些建议?
答案 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,只要可以,那么免费的应该适合您。