当前位置:  开发笔记 > 编程语言 > 正文

在内存中保存一个大集合,用于查询

如何解决《在内存中保存一个大集合,用于查询》经验,为你挑选了1个好方法。

例如,在我的ASP.Net应用程序中,无限期地将IEnumerable保存在内存中是否可以?

例如:

每天早上,我的asp.net mvc应用程序需要从CSV文件加载数据.这些数据是从几个CSV文件加载的,然后使用LINQ连接等.它被合并为一个单独的,非规范化的集合,大约500,000个"东西"

应用程序的唯一目的是查询此数据.方法如:

GetThingsByName

GetThingsByPrice

等等...

我的想法是只有控制器可以调用的静态IEnumerable ..?

它将在专用服务器上运行......

基本上,我试图避免使用数据库(任何类型,NoSQL或其他),因为我不认为它是必需的,因为数据是相当不稳定的.

查询将使用LINQ完成.



1> James Kovacs..:

我同意帕维尔的观点.它还高度依赖于您将要运行的查询类型.如果您正在进行大量聚合,那么您可能需要像SQLite这样的内存数据库,甚至可能需要像MySQL或SQL Server这样的完整数据库.如果您只是通过PK进行查找,则可能会将数据存储在HashMap或类似内容中.

IEnumerable和LINQ-to-Objects并不神奇.它们只是为查询和聚合提供了一个通用接口.如果您的IEnumerable的实际实现类是List,猜猜是什么?当你说:

var query = from item in items  // items is a List
            where item.Name.StartsWith("Foo")
               && item.CreationDate > new DateTime(2010,1,1)
            select item;
var allFoos = query.ToList();

然后LINQ-to-Objects将遍历内存中的所有500,000个对象,检查是否满足where子句.将不会发生索引或其他查询优化.你将通过内存进行线性搜索!

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有