2011-12-14 52 views
3

我正在将一个复杂的过程从SQL移动到一个.NET应用程序。我只是通过拉下SQL所需的数据,然后将数据存储在数据表中来采取暴力方法。通过使用流水线模式,我打破了可以并行处理的流程(不依赖于其他流程,也不处理相同的数据位)。在内存替代数据集

一切都很好,但我想知道是否有内存中的SQL解决方案比DataSet/DataTable结构执行更好。我们一次谈论50k行,最多支持1m支持数据行(读取5b行)。 1行(所有支持的数据行)的行大小可能在1K左右(由于大字符串)。

我的问题是具体关于数据集的性能,内存开销和持久性。为了恢复目的,我需要将每个阶段的数据序列化到磁盘。

将行映射到强类型模型会更好吗?我不需要任何关系或数据集的其他好处;我用自己的并行处理替换了大多数搜索功能。

数据只使用基本类型,没有斑点,溪流,地理等

+0

只要将它转换为强类型模型,我会说它取决于您所代表的数据。另外,你在内存中试图对数据做什么/一次?了解这可能会帮助我和他人确定最佳方法/最佳建议。 – JesseBuesking 2011-12-14 23:57:07

+0

需要发生大约100个不同的过程。检查重复记录,数据计算和聚合,更新,删除等。所得到的最终数据集被推回到SQL。一些进程需要连接和组功能。 – 2011-12-14 23:59:10

回答

3

对于本地SQL操作,看看SQLite的。我不记得它是否可以在内存中独占运行,但是在磁盘缓存和事务日志关闭的情况下,它可能会非常接近。

多年前,Steve Shaunessey在Borland开发了一种快速的内存中SQL引擎。我不知道它是否曾经过产品化。看看Embarcadero.com网站,看看他的工作是否存在残余。

我注意到aidaim.com发布了一个内存中的SQL引擎。没有经验,仅供参考。

也考虑LINQ进行内存查询操作。如果您注意自己在做什么,那么LINQ的查询组合和延迟执行对于大数据IMO来说工作得很好。而且,不需要SQL解析器。