C# 多字段索引对象数组
我有10万用户 查询:获取名为“Rafael”且年龄在40到50岁之间的用户C# 多字段索引对象数组,c#,linq-to-objects,in-memory-database,C#,Linq To Objects,In Memory Database,我有10万用户 查询:获取名为“Rafael”且年龄在40到50岁之间的用户 按Linq2Objects:users.Where(p=>p.Name==“Rafael”&&p.Age>=40&&p.Age如果数据未准备好,则在未进行完整数据集扫描的情况下无法获得所需的结果。 在时间不关键时提前准备数据,在需要较短响应时间时处理已排序的数据 在数据库世界中有一个类似的例子 有一个包含100K条记录的表。有人想使用“where”子句运行Select查询,该子句通过非主键筛选数据。除非实现索引,否则
- 按Linq2Objects:users.Where(p=>p.Name==“Rafael”&&p.Age>=40&&p.Age如果数据未准备好,则在未进行完整数据集扫描的情况下无法获得所需的结果。
在时间不关键时提前准备数据,在需要较短响应时间时处理已排序的数据
在数据库世界中有一个类似的例子
有一个包含100K条记录的表。有人想使用“where”子句运行Select查询,该子句通过非主键筛选数据。除非实现索引,否则在执行计划中执行“表扫描”操作总是很慢
使用以下内容实现索引的代码示例:
//未排序的用户数组-原始数据 用户[]原始用户; //提前准备数据(创建一个索引)。 //具有最佳分布的字段应用作键 ILookup preparedUsers=originalUsers.ToLookup(u=>u.Name,u=>u); //需要子集时运行此代码 //按键搜索由.NET类优化 //“where”子句适用于小数据集
preparedUsers[“Rafael”]。其中(p=>p.Age>=40&&p.Age如果您的数据未准备好,没有完整的数据集扫描,您将无法获得想要的结果。 在时间不关键时提前准备数据,在需要较短响应时间时处理已排序的数据 在数据库世界中有一个类似的例子 有一个包含100K条记录的表。有人想使用“where”子句运行Select查询,该子句通过非主键筛选数据。除非实现索引,否则在执行计划中执行“表扫描”操作总是很慢 使用以下内容实现索引的代码示例://未排序的用户数组-原始数据 用户[]原始用户; //提前准备数据(创建一个索引)。 //具有最佳分布的字段应用作键 ILookup preparedUsers=originalUsers.ToLookup(u=>u.Name,u=>u); //需要子集时运行此代码 //按键搜索由.NET类优化 //“where”子句适用于小数据集
preparedUsers[“Rafael”]。其中(p=>p.Age>=40&&p.AgeBy线程安全,您的意思是当您从集合中查询时,会有其他进程写入到集合中吗?不,抱歉。只读线程安全。我已更新了问题。但是否有任何代码框架使其透明。-是的。它是RDBMS:)通过线程安全进行检查,您的意思是当您从集合中查询时,会有其他进程写入到集合中吗?不,抱歉。只读线程安全。我已经更新了问题。但是否有任何代码框架使其透明。-是的。这是RDBMS:)请检查public class User { public int Id { get; set; } public int Age { get; set; } public string Name { get; set; } }
public class FastArray<T>
//not sorted array of users - raw data User[] originalUsers; //Prepare data in advance (create one index). //Field with the best distribution should be used as key ILookup<string, User> preparedUsers = originalUsers.ToLookup(u => u.Name, u => u); //run this code when you need subset //search by key is optimized by .NET class //"where" clause works with small set of data preparedUsers["Rafael"].Where(p=> p.Age>=40 && p.Age<=50).ToArray();