Напилил свой поисковый Java-кеш с блекджеком и low-latency. Дал ему чисто русское, православное имя - Dozensbit
Если у вас много не структурированных данных, и надо очень быстро выполнять по ним поиск, то это то что вам надо.
Пример: Предположим у нас есть объекты с разным количеством атрибутов. По сути schema-less
SEARCH User WHERE (City = NY OR City = Berlin) AND Gender = female
Всё это возможно.
Выборка по миллиону объектов укладывается в 9 мс - в сложном случае, и 2 мс в простом.
Доступно на GitHub https://github.com/2anikulin/dozensbit/wiki Там же более подробное описание и бенчмарк
Если у вас много не структурированных данных, и надо очень быстро выполнять по ним поиск, то это то что вам надо.
Пример: Предположим у нас есть объекты с разным количеством атрибутов. По сути schema-less
User0 : { Name : John, Age : 32, City : [Berlin, Dresden], } User1 : { Name : Ann, Gender : female, City : NY, HasChildren: true }А еще нам надо выполнить вот такой поисковый запрос:
SEARCH User WHERE (City = NY OR City = Berlin) AND Gender = female
Всё это возможно.
Cache<string> cache = new IndexedCache<string>(); MultiValueMap attributes1 = new MultiValueMap(); attributes1.put("name", "john"); attributes1.put("age", "32"); attributes1.put("city", "berlin"); attributes1.put("city", "dresden"); cache.put("This is user #1", attributes1); //А можно для лаконичности использовать Utils.toMap cache.put("This is user #2", Utils.toMap("{name:ann,gender:female,city:ny}")); cache.commit(); QueryBuilder builder = cache.createQuery(); QueryBuilder.Query query = builder .start("city", "ny") .or("city", "berlin") .and("gender", "female") .get(); List<string> result = cache.find(query);Но и это еще не всё. Можно выполнять сложные выборки
QueryBuilder.Query query = cache.createQuery() .start( cache.createQuery() .start("city", "berlin") .or("city", "moscow") .get() ).and( cache.createQuery() .start("lang", "ru") .or("lang", "en") .get() ) .get(); List<string> result = cache.find(query);Всё это thread-safe и работает в многопоточной среде.
Выборка по миллиону объектов укладывается в 9 мс - в сложном случае, и 2 мс в простом.
Доступно на GitHub https://github.com/2anikulin/dozensbit/wiki Там же более подробное описание и бенчмарк