Вот тест исходный код: https://github.com/a-rog/px100data/tree/master/examples/HazelcastVsIgnite
Это является частью JDBC-иш рамках NoSQL я уже говорил ранее: Px100 Data
здания и запустить его:
cd <project-dir>
mvn clean package
cd target
java -cp "grid-benchmark.jar:lib/*" -Xms512m -Xmx3000m -Xss4m com.px100systems.platform.benchmark.HazelcastTest 100000
java -cp "grid-benchmark.jar:lib/*" -Xms512m -Xmx3000m -Xss4m com.px100systems.platform.benchmark.IgniteTest 100000
Как вы можете см., я установил максимальные пределы памяти, чтобы избежать сбора мусора. Вы также можете запустить мой собственный тест framework (см. Px100DataTest.java) и сравнить его с двумя выше, но давайте сосредоточимся на чистой производительности. Ни один из тестов не использует Spring или что-либо еще, кроме Hazelcast 3.5.1 и Ignite 1.3.3 - последнего на данный момент.
Контрольный номер транзакции вставляется указанное количество экземпляров. Записи размером 1 КБ (100000 из них - вы можете увеличить его, но остерегайтесь памяти) партиями (транзакциями) 1000. Затем он выполняет два запроса с восходящей и нисходящей сортировкой: четыре всего. Все поля запроса и ORDER BY индексируются.
Я не собираюсь публиковать весь класс (скачать его из GitHub). Запрос Hazelcast выглядит следующим образом:
PagingPredicate predicate = new PagingPredicate(
new Predicates.AndPredicate(new Predicates.LikePredicate("textField", "%Jane%"),
new Predicates.GreaterLessPredicate("id", first.getId(), false, false)),
(o1, o2) -> ((TestEntity)o1.getValue()).getId().compareTo(((TestEntity)o2.getValue()).getId()),
100);
Совпадение Ignite запрос:
SqlQuery<Object, TestEntity> query = new SqlQuery<>(TestEntity.class,
"FROM TestEntity WHERE textField LIKE '%Jane%' AND id > '" + first.getId() + "' ORDER BY id LIMIT 100");
query.setPageSize(100);
Вот результаты выполнены на моем 2012 8-ядерный MBP с 8G памяти:
Hazelcast
Starting - used heap: 49791048 bytes
Inserting 100000 records: ....................................................................................................
Inserted all records - used heap: 580885264 bytes
Map: 100000 entries, used heap: 531094216 bytes, inserts took 5458 ms
Query 1 count: 100, time: 344 ms, heap size: 298844824 bytes
Query 2 count: 100, time: 115 ms, heap size: 454902648 bytes
Query 3 count: 100, time: 165 ms, heap size: 657153784 bytes
Query 4 count: 100, time: 106 ms, heap size: 811155544 bytes
Ignite
Starting - used heap: 100261632 bytes
Inserting 100000 records: ....................................................................................................
Inserted all records - used heap: 1241999968 bytes
Cache: 100000 entries, heap size: 1141738336 bytes, inserts took 14387 ms
Query 1 count: 100, time: 222 ms, heap size: 917907456 bytes
Query 2 count: 100, time: 128 ms, heap size: 926325264 bytes
Query 3 count: 100, time: 7 ms, heap size: 926325264 bytes
Query 4 count: 100, time: 103 ms, heap size: 934743064 bytes
Одна очевидная разница в производительности вставки - заметно в реальной жизни. Однако очень редко одна вставка 1000 записей. Обычно это одна вставка или обновление (сохранение введенных данных пользователя и т. Д.), Поэтому меня это не беспокоит. Однако производительность запросов. Большинство бизнес-приложений, ориентированных на данные, отличаются прочностью.
Обратите внимание на потребление памяти. Ignite намного более голоден, чем Hazelcast. Это может объяснить лучшую производительность запросов. Ну, если я решил использовать сетку в памяти, я должен беспокоиться о памяти?
Вы можете четко сказать, когда сетки данных попадают в индексы, а когда нет, как они кэшируют скомпилированные запросы (7 мс) и т. Д. Я не хочу спекулировать и позволяю вам играть с ним, а также , поскольку разработчики Hazelcast и Ignite предоставляют некоторое представление.
Насколько это возможно, это сопоставимо, если не ниже MySQL. Технология IMO в памяти должна улучшиться. Я уверен, что обе компании будут делать заметки.
Результаты, приведенные выше, довольно близки. Однако при использовании в Px100 Data и более высоком уровне Px100 (который сильно зависит от индексированных полей сортировки для разбивки на страницы) Ignite выдвигается вперед и лучше подходит для моей структуры. В первую очередь я забочусь о производительности запросов.
_ «Если я решил использовать сетку в памяти, должен ли я беспокоиться о памяти?» _, Ну да, вы должны, если не хотите, чтобы запрос сбил ваш кластер с помощью OOME. Конечно, производительность действительно важна, но это не значит, что вы не должны беспокоиться об использовании памяти. – nilskp