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

Ale*_*lex 1 c# asp.net

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

例如:

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

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

  • GetThingsByName
  • GetThingsByPrice

等等...

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

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

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

查询将使用LINQ完成.

Jam*_*acs 5

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

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

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

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