Напилил свой поисковый 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 Там же более подробное описание и бенчмарк
Комментариев нет:
Отправить комментарий