我正在将一个复杂的进程从SQL迁移到.NET应用程序。我只是通过从SQL中下拉所需的数据,然后存储在数据表中来采取暴力方法。使用带步进的管道模式,我打破了可以并行完成的过程(不依赖于其他进程,也不依赖于相同的数据位)。
一切都很顺利,但我想知道是否有一个比DataSet / DataTable结构更好的内存中的sql解决方案。我们一次谈论的是50k行,最多支持1m的数据行(读取5b行)。 1行(包括所有支持数据行)的行大小可能约为1K avg(由于大字符串)。
我的问题是关于DataSet的性能,内存开销和持久性。我需要将每个阶段的数据序列化到磁盘以进行恢复。
将行映射到强类型模型会更好吗?我不需要数据集的任何关系或其他好处;我用自己的并行处理替换了大部分搜索功能。
数据仅使用原始类型,没有blob,流,地理等。
答案 0 :(得分:3)
对于本地SQL操作,请查看SQLite。我不记得它是否只能在内存中运行,但是在磁盘缓存和事务日志关闭的情况下,它可能会非常接近。
许多年前,史蒂夫·肖内西(Steve Shaunessey)在Borland开发了一个快速的内存中SQL引擎。我不知道它是否曾经产品化。浏览一下Embarcadero.com网站,了解他的工作中是否有遗留下来。我注意到aidaim.com宣传了一个内存中的SQL引擎。没有经验,仅供参考。
还要考虑LINQ用于内存中查询操作。如果你注意你正在做的事情,LINQ的查询组合和延迟执行适用于大数据,IMO。并且,不需要SQL解析器。