除了数据表之外的最佳结构,可以在前端存储~50万条记录

时间:2012-05-01 06:19:57

标签: c# .net dictionary datatable binary

我有一个Datatable,它从数据库(SQLite)中获取~5,50,000条记录。提取它会降低系统速度。

我将这些记录存储在SQLite数据库的后端和Datatable的前端。 现在该怎么做才能使后端的数据库创建时间(~10.5小时)和前端的获取时间减少。

是否有其他结构可以用来做到这一点。我读过那本词典&二进制文件很快。它们可以用于此目的吗?如何?

(它不是一个网络应用程序。它是一个WPF桌面应用程序,前端和后端在同一台机器上。)

3 个答案:

答案 0 :(得分:1)

您的基本问题我相信,不是您想要维护的结构,而是方式您管理数据流。而不是将数据库中的所有数据提取到某个结构(在您的情况下为DataTable),而是让一些stored procedure服务器端上进行计算并返回给您数据已经计算好了通过这种方式,您可以获得多种好处,例如:

  • 持有数据库服务器的服务器通常比开发或客户机
  • 更快
  • 大量减少数据传输,因为只返回计算的结果

编辑

考虑到编辑后的帖子,我会说DataTable已经在内存访问方面进行了高度优化,我认为将其更改为其他内容会给您带来显着的好处。我认为可以带来一个banefit是对程序流程的修改。换句话说,尝试回答以下问题:

  • 我是否需要所有当代的记录?
  • 我可以在service进行一些计算,比方说,晚上吗?
  • 我可以使用SQL Server Express(只是示例)并获得运行stored procedure的可能性,可能(必须被测量)更快地运行这些东西,甚至在同一台机器上?

答案 1 :(得分:1)

您是否考虑过在数据位置进行计算,而不是抓取它?你能给我们一些更多的信息,比如它存储的内容以及你如何获取它以及你如何处理它。

如果没有指标和背景信息,很难确定一个受害者。

很容易说 - 是的将数据放在一个文件中。但是文件本地,是网络问题,你是否充分利用核心/线程等。

从数据开始,看看需要做些什么,然后设计出最佳的优化,这样做会好得多。

编辑:

好的,所以你在同一台机器上?在这种情况下你应该考虑的一件事是你对数据做了什么。它需要是SQL吗?如果您只是使用是加载数据表?或者是你没有透露的复杂性?

我有一个类似的任务 - 我刚创建了一个大文本文件,并使用内存映射进行读取是有效的,没有任何开销。这是你在说什么吗?

答案 2 :(得分:0)

您可以尝试使用persisted dictionary like RaptorDB来存储和获取/操作ArrayList中的数据。概念证明不应该花费很长时间。