синхронно срещу асинхронно запис/изтриване в Cassandra

Каква е разликата между синхронното и асинхронното запис/изтриване в Cassandra?

Ако използвам executeAsynchronously() вместо execute() метод от CqlOperation клас (драйвер datastax), това ще подобри ли производителността по отношение на пропускателната способност (TPS)? В моето приложение правя единично вмъкване/изтриване, както и групово вмъкване. Досега използвах само метод execute (синхронен) и мисля да използвам асинхронно изпълнение, за да подобря производителността на приложението по отношение на TPS.


person Laxmikant    schedule 03.11.2015    source източник
comment
Преди да четете партиди, прочетете ги. Партидите не подобряват производителността   -  person jny    schedule 03.11.2015


Отговори (3)


Асинхронните записи предлагат по-добра производителност на работник, но добавят допълнителни разходи за обратни извиквания и обработка на грешки.

Направих тест наскоро, за да намеря предимства в производителността, както и внедряване на обратно извикване с обработка на грешки с помощта на един работник с 1 милион записа, записани Async, беше намерен 4 пъти по-бързо от синхронните. in_flight queries бяха ограничени до 1000, този брой може да бъде настроен съответно според условията на околната среда (Брой връзки, които искате да поставите на кабела, да речем с 200 ms мрежова латентност и 1 ms време за реакция на сървъра, може да отидете за 200 заявки, които да бъдат поставени in_flight, докато Синхронизираното повикване би оставило сървъра свободен за 199 ms от 200 ms в този случай сървърът ще обработва поне една заявка почти през цялото време), но без ограничение ще задръсти мрежата с възможно влошаване на производителността.

В някои случаи синхронната заявка може да е по-подходяща, особено ако резултатът от заявката е критичен, преди да продължите с програмата. Но в повечето случаи Async е достатъчен.

Накратко, отговорът на въпроса ви е Да - тествах увеличение на TPS от 4 пъти.

Справка - оценка на ефективността с помощта на асинхронни записи

person Bhuvan Rawal    schedule 22.05.2016

sync write(or delete) to cassandra ще блокира изпълнението на кода, докато клиентът не получи потвърждение, че операцията е завършена въз основа на нивото на съгласуваност.

От друга страна, асинхронният запис (или изтриване) ще изпрати заявката до cassandra и след това ще продължи с изпълнението на кода (няма да блокира). Сега трябва да регистрирате някакъв вид обратно извикване, което ще ви информира (асинхронно), че операцията за запис е приключила.

Цялото блокиране се натрупва и може да забави приложението ви. Тъй като асинхронните заявки продължават незабавно, те ви позволяват да изпращате повече асинхронни заявки веднага след това, вместо да чакате първата да завърши. Това е мястото, където се получава увеличение на производителността, особено ако изпращате много заявки към cassandra.

person Aki    schedule 04.11.2015

Определено ще увеличи производителността. Не съм го пробвал, но връзката по-долу казва същото Прочетете въпросът

http://www.datastax.com/dev/blog/java-driver-async-queries

person undefined_variable    schedule 03.11.2015