Skip to content

eqr/Grid.NET

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Grid.NET is a caching solution for .NET Standard application that solves the problem of effective search over a collection by different class properties in memory-efficient way.

Example:

List<Person> persons = GetAllPersons();
var cache = CacheFactory.CreateCache(persons);
cache.AddIndexer(new Indexer<Person, string>(p => p.Name));
// Returns all persons with name Jane
var janes = cache.Get(p => p.Name, "Jane").ToList(); 
cache.AddIndexer(new Indexer<Person, string>(p => p.LastName));
// Returns all persons with last name Smith
var smiths = cache.Get(p => p.LastName, "Smith").ToList(); 

User can not query by non-indexed field, ArgumentException is thrown in that case.

List<Person> persons = GetAllPersons();
var cache = CacheFactory.CreateCache(persons);
// not allowed, the field is not indexed
var bornInThatDay = cache.Get(p => p.BirthDate, new DateTime(1970,1,1)); 

Other usecases are expressed in tests.

Plans:

  • Expose the cache as a web service with WebAPI
  • Add more flexibility in indexing
  • Find a better options to store the original values, probably off-heap solutions
  • Distributed cache
  • Document things better, add examples
  • Publish a NuGet package
  • More complicated queries (e.g. range queries)

Improvements for indexer:

  • add option to keep only unique records in the index. This option chooses between List and HashSet in index dictionary
  • add option to make indexing parallel or sequential
  • for string indexers: case insensitive or not. Different Indexer class?
  • option to protect cache entities, they are deep copied on return if it is possible. If no, returned as is. Deep copy can be made e.g. by serializing and deserializing if there are no better approaches.

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages