The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Bullet Cache - высокопроизводительная система кэширования да..."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от opennews (??) on 18-Окт-11, 13:08 
Иван Ворас (Ivan Voras), один из коммитеров FreeBSD, анонсировал (http://ivoras.sharanet.org/blog/tree/2011-10-11.bullet-cache...) новую систему для организации кэширования данных в оперативной памяти c хранением данных в формате ключ/значение - Bullet Cache (http://mdcached.sourceforge.net/). По своим возможностям и выполняемым задачам система очень близка (http://mdcached.sourceforge.net/UserGuide.html) к Memcached (http://memcached.org/) и отличается, главным образом, внутренней архитектурой, нацеленной на более активное использование многопоточности, и поддержкой тегов. Кроме того, в Bullet Cache реализовано несколько расширенных режимов для обращения к данным и определения их времени жизни в кэше, что позволяет предоставить приложению более полный контроль над содержимым  кэша.


Код распространяется (http://sourceforge.net/projects/mdcached/files/mdcached/) под лицензией BSD (2-clause BSDL). Клиентские библиотеки пока доступны только для языков Си, ...

URL: http://ivoras.sharanet.org/blog/tree/2011-10-11.bullet-cache...
Новость: http://www.opennet.me/opennews/art.shtml?num=32064

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Аноним (??) on 18-Окт-11, 13:08 
Очень хорошо! И то что нужно.
Библиотек теперь бы по больше!

Где можно почитать про протокол? Если вдруг соберусь на написание своей библиотеки.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Erley (ok) on 18-Окт-11, 13:13 
Миллион tps - это просто отличный результат!
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Аноним (??) on 18-Окт-11, 13:21 
Отличный от чего? В какую сторону? С чем сравнивалось?
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

7. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Erley (ok) on 18-Окт-11, 13:39 
> Отличный от чего? В какую сторону? С чем сравнивалось?

Попробуйте сами сделать что-то подобное. Я такое делал, скажу вам что это challenge :)

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

3. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Crazy Alex (ok) on 18-Окт-11, 13:13 
Человек оринетируется на скорость и тащит текстовый SQL-подобный протокол? Пример Mysql его ничему не научил?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Bullet Cache - высокопроизводительная система кэширования да..."  +5 +/
Сообщение от Аноним (??) on 18-Окт-11, 13:15 
MySQL такой медленный потому что использует SQL-синтаксис? Внезапно!
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Bullet Cache - высокопроизводительная система кэширования да..."  –2 +/
Сообщение от Crazy Alex (ok) on 18-Окт-11, 13:19 
Внезапно, при выборке по первичному ключу (аналог key-value) у японцев получалось сильно поднять производительность, введя простой для разбора протокол вместо SQL (см. HandlerSocket).
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

8. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Аноним (??) on 18-Окт-11, 13:40 
> Внезапно, при выборке по первичному ключу (аналог key-value) у японцев получалось сильно поднять производительность, введя простой для разбора протокол вместо SQL (см. HandlerSocket).

Что-то мне подсказывает, что производительность упиралась вовсе даже не в разбор SQL. Куда более сложный многомегабайтный PHP-код с кучей инклудов парсится (только парсится, без выполнения) быстрее в разы сотни-другой байт SQL-запроса, который при выполнении так нагружает базу.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

10. "Bullet Cache - высокопроизводительная система кэширования да..."  –1 +/
Сообщение от Crazy Alex (??) on 18-Окт-11, 14:11 
Тут подсказки интуиции не требуются - вся ифнормация есть в открытом виде. Идём на сайт HandlerSocket, читаем, при желании - сравниваем. Суть именно в том, что на простых быстрых запросах (по первичному ключу, например) скорость упирается в разбор SQL.
Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

11. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Аноним (??) on 18-Окт-11, 14:17 
> Тут подсказки интуиции не требуются - вся ифнормация есть в открытом виде. Идём на сайт HandlerSocket, читаем, при желании - сравниваем. Суть именно в том, что на простых быстрых запросах (по первичному ключу, например) скорость упирается в разбор SQL.

А я не спорю, что MySQL может тормозить на разборе SQL, но в MySQL парсер не эталонный и пример с ним ничего не говорит о скорости работы парсера в сабже.

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

15. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Crazy Alex (ok) on 18-Окт-11, 14:47 
Не знаю, насколько он там не эталонный, но мой опыт подтверждает то, что лукап по хорошо оптимизированной струтуре данных по времени сравним с примитивным разбором строки из 10-15 байт, если блокировки не влезут.
Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

19. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Аноним (??) on 18-Окт-11, 15:10 
> Не знаю, насколько он там не эталонный, но мой опыт подтверждает то,
> что лукап по хорошо оптимизированной струтуре данных по времени сравним с
> примитивным разбором строки из 10-15 байт, если блокировки не влезут.

Тут речь идет о миллионе транзакций в секунду!
Если у mysql что то во что то упирается (на нагрузке на пару парядков меньше) то это его проблемы и вообще offtop!


Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

12. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от опроро on 18-Окт-11, 14:34 
Prepare Statement
ВНЕЗАПНО!
Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

13. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Crazy Alex (ok) on 18-Окт-11, 14:43 
Может, прочтёте о чём вообще речь? А речь о том, что в шустром кеше делать SQL-подобный синтаксис - нарываться на тормоза. Или вы и там prepare реализовывать предложите?
Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

20. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Аноним (??) on 18-Окт-11, 15:30 
:facepalm:

Ещё раз. Распарсить много мегабайт чьего-бы то ни было синтаксиса - плёвое дело. Посмотри как быстро PHP парсит свои исходники. Ну ладно, не нравится PHP, возьми Python. Если в MySQL парсер такой кривой, то это исключительно его проблемы, а не проблемы синтаксиса. Ну замени ты SELECT UNIX_TIMESTAMP() на echo time(), по-твоему первый вариант дольше в десять раз будет парситься только потому что он в SQL-синтаксисе записан?

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

24. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Crazy Alex (??) on 18-Окт-11, 15:52 
Плёвое дело по сравнению с чем? В запросом к диску - да сколько угодно. С генерацией страницы с кучей исполняемого кода и, возможно, теми же SQL-запросами - тем более. Но НЕ по сравнению с поиском в прилично оптимизированном хэше. Ну есть у меня этот опыт, так что знаю о чем говорю. В таких случаях надо использовать бинарные сериализованные форматы, которые парсить не надо вообще - тупо выгребать строки заранее известных размеров по заранее известным смещениям.

Впрочем, если будет время - потестирую, что даёт избавление от парсинга в данном случае. Но процентов 10 скорости как минимум должно прибавиться (а скорее - около 30%).

Ответить | Правка | ^ к родителю #20 | Наверх | Cообщить модератору

26. "Bullet Cache - высокопроизводительная система кэширования да..."  +2 +/
Сообщение от Аноним (??) on 18-Окт-11, 16:12 
Объясни как ты себе представляешь работу MySQL? На примере PHP я представляю примерно так:

1. PHP -> 2. SQL-строка посылается в MySQL -> 3. парсинг строки в понятную MySQL команду -> 4. выполнение команды (поиск по базе) -> ...

По твоей логике 3-й пункт должен выполняться ну очень долго и являться основным тормозом. Я правильно понимаю?

Ответить | Правка | ^ к родителю #24 | Наверх | Cообщить модератору

29. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Crazy Alex (??) on 18-Окт-11, 16:16 
Если там есть хоть какие-то сложные запросы - нет, конечно. См. японцев с HandlerSocket - проблема проявляется на простых запросах  вида "SELECT name FROM table WHERE primaryKey=1" и подобных - то есть когда сам запрос выполняется мгновенно. Вот там уже парсинг SQL и обработка эскейпов чувствуется.

Я вот чего не пойму: чего со мной-то спорить? Есть код, есть результаты тестирования - и не только автора кода, есть описание условий тестирования... что ещё нужно?

Ответить | Правка | ^ к родителю #26 | Наверх | Cообщить модератору

30. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Аноним (??) on 18-Окт-11, 16:30 
До тебя никак не дойдёт, что скорость поиска зависит от реализации. Неужели ты думаешь, что в эту крошечную библиотеку встроен полноценный SQL-парсер с поддержкой всех SQL-стандартов? Да тут по сути конечный автомат с максимум 10-20 состояниями, распарсить строку в 100 байт и понять, что хотят найти в кэше на нём можно за 0,000001 сек., если не меньше.

Не смотрел на тестирования автора, я высказался касательно твоего утверждения, что SQL-подобные синтаксисы тормозные в принципе.

Ответить | Правка | ^ к родителю #29 | Наверх | Cообщить модератору

33. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Crazy Alex (ok) on 18-Окт-11, 17:11 
Я уже глянул в исходниках - нет там текстового синтаксиса, это дурной перевод. Есть нормальный бинарный формат и API-функции.

И не надо приписывать мне то, что я не говорил.
Я НЕ ГОВОРИЛ, ЧТО SQL-ПОДОБНЫЕ СИНТАКСИСЫ ТОРМОЗНЫЕ В ПРИНЦИПЕ.
Я сказал, что для таких быстрых выборок, как поиск по primary key в Mysql и тем более - выборка из хеша оверхед на парсинг строки уже в 10-15 символов чувствуется очень хорошо. Потому что сам на это нарывался. А если эскейпы надо обрабатывать - так это вообще лишний memcpy, что ни в какие ворота.

Ответить | Правка | ^ к родителю #30 | Наверх | Cообщить модератору

35. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Аноним (??) on 18-Окт-11, 17:28 
> Я сказал, что для таких быстрых выборок, как поиск по primary key в Mysql и тем более - выборка из хеша оверхед на парсинг строки уже в 10-15 символов чувствуется очень хорошо. Потому что сам на это нарывался. А если эскейпы надо обрабатывать - так это вообще лишний memcpy, что ни в какие ворота.

Ок. Но вообще говоря, лишний memcpy вполне сойдёт. Сколько их происходит при сложных выборках уже после собственно парсинга запроса... При тех же Using filesort. Капля в океане, я бы сказал.

Ответить | Правка | ^ к родителю #33 | Наверх | Cообщить модератору

36. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Crazy Alex (ok) on 18-Окт-11, 17:47 
О memcpy я речь вёл в контексте именно кэша, там вообще работы с диском нет, как и сложных запросов.
Ответить | Правка | ^ к родителю #35 | Наверх | Cообщить модератору

32. "Bullet Cache - высокопроизводительная система кэширования да..."  +2 +/
Сообщение от Грустный Анон on 18-Окт-11, 16:54 
Нужно ещё понимание работы RDMS.
Ответить | Правка | ^ к родителю #29 | Наверх | Cообщить модератору

21. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от опроро on 18-Окт-11, 15:31 
люди реально думают что базы данных данных настолько тупые насколько они умные )
весь мир живёт с медленным sql и не знает насколько он тормозной )

а где тесты с Prepared Statements ?

ps http://www.theserverside.com/news/1365244/Why-Prepared-State...

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

27. "Bullet Cache - высокопроизводительная система кэширования да..."  +1 +/
Сообщение от Crazy Alex (??) on 18-Окт-11, 16:12 
Вопрос снят - никакого SQL и вообще текстового протокола в Bullet Cache нет - именно по причине тормозности, на что и указывает автор в исходниках.
Ответить | Правка | ^ к родителю #21 | Наверх | Cообщить модератору

28. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Crazy Alex (??) on 18-Окт-11, 16:13 
> Вопрос снят - никакого SQL и вообще текстового протокола в Bullet Cache
> нет - именно по причине тормозности, на что и указывает автор
> в исходниках.

Просто в новости перевод кривой.

Ответить | Правка | ^ к родителю #27 | Наверх | Cообщить модератору

39. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от опроро on 18-Окт-11, 20:11 
ну я ответил по поводу HandlerSocket
как я понял там жаловались на медленный парсинг в mysql
ну как раз для таких задач есть Prepared Statement (хотя тож есть недостатки)
и походу те парни ни слова не сказали про это (хотя я да же не читал оригинал)
Ответить | Правка | ^ к родителю #28 | Наверх | Cообщить модератору

37. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Аноним (??) on 18-Окт-11, 20:04 
http://msdn.microsoft.com/en-us/library/aa260835.aspx -- см. там раздел "The (so-called) Prepared property".
Ответить | Правка | ^ к родителю #21 | Наверх | Cообщить модератору

42. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Аноним (??) on 18-Окт-11, 22:57 
> Может, прочтёте о чём вообще речь? А речь о том, что в
> шустром кеше делать SQL-подобный синтаксис - нарываться на тормоза. Или вы
> и там prepare реализовывать предложите?

Речь идёт о том что вы не умеете читать, и там нет никакого SQL.

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

14. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Аноним (??) on 18-Окт-11, 14:44 
Оставь. Нельзя (сложно) программиста php убедить в том что ассемблер суммирует быстрее, если он не знает что такое ассемблер. Большинство посетителей, как я понимаю, не сильны в реализации технологий, а видят лишь обложку. И по цвету обложки делают вывод о содержании.
Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

16. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Crazy Alex (ok) on 18-Окт-11, 14:49 
Кто-то проигнорирует, кто-то заинтересуется - народ здесь разный...
Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

17. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Аноним (??) on 18-Окт-11, 14:52 
> Кто-то проигнорирует, кто-то заинтересуется - народ здесь разный...

Вряд ли. Напиши новость что в Debian/что-угодно внедрили инновацию и каждую команду исполняют дважды с последующим сравнением результатов чтобы исключить аппаратные ошибки, и в результате получили ускорение - и получишь сотни восторженных отзывов что Debian/что-угодно лучшее, они давно сидят и рады что он лучше всех. И они заклюют любого кто скажет что внедрили глупость. Сообщество идиотов не может ошибаться.

Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

23. "Bullet Cache - высокопроизводительная система кэширования да..."  +3 +/
Сообщение от Crazy Alex (??) on 18-Окт-11, 15:43 
>> Кто-то проигнорирует, кто-то заинтересуется - народ здесь разный...
> Вряд ли. Напиши новость что в Debian/что-угодно внедрили инновацию и каждую команду
> исполняют дважды с последующим сравнением результатов чтобы исключить аппаратные ошибки,
> и в результате получили ускорение - и получишь сотни восторженных отзывов
> что Debian/что-угодно лучшее, они давно сидят и рады что он лучше
> всех. И они заклюют любого кто скажет что внедрили глупость. Сообщество
> идиотов не может ошибаться.

Так на одного крикуна тысяча тех, кто молчит и читает.

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

40. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Школьник (ok) on 18-Окт-11, 22:16 
Я не могу говорить конкретно за MySQL, однако, мне приходилось работать тестировщиком другой RDBMS(проприетарной). В общем, исходя из того, что я узнал, я сделал такие выводы: производительность падает не только (и, возможно, не столько) на разборе SQL, сколько при таких дальнейших операциях как загрузка метаданных(хотя они часто кэшируются), проверка существования указанных в запросе таблиц, колонок, проверка типов данных, приведение типов данных, составление плана запроса, его оптимизация, преобразование плана в специальное внутреннее представление и т.д. Собственно разбор SQL (синтаксический разбор) тоже играет роль, но явно не первую.
При этом полностью согласен с тем, что использование любого текстового протокола при работе с кэшем абсолютно бессмысленно, ибо в случае с кэшем, а не сложной RDBMS,  накладные расходы на разбор текста будут относительно велики.
Прочитал я про HandlerSocket (кстати, спасибо за упоминание о нем). Стало несколько непонятно следующее: для чего в MySQL, который еще с 5ой версии поддерживает prepared statements, это нужно? Особенно учитывая то, что протокол HandlerSocket по сути текстовый (хотя и весьма компактный и простой). Может, кто-то объяснит?
Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

18. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Аноним (??) on 18-Окт-11, 15:07 
А что уж сразу не британские ученые?
Тут же прямо сказано SQL подобный синтакисис! теги к ключам очень полезная штука. А те кто не хочет могут юзать свои регекспы.
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

22. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Crazy Alex (??) on 18-Окт-11, 15:42 
Ну и откуда сие недоверие? Методика тестов, патчи, результаты - у них всё открыто. Можно проверить, что и сделала куча народу. А для этого чуда я, пожалуй, побалуюсь на досуге с аналогичным патчем - поглядим, что получится.

Теги к ключам - полезная штука. А генерация SQL-подобного синтаксиса а потом его разбор - вредная. И больше шансов ошибку пропустить, которую иначе компилятор в нормальном языке поймал бы, и дурацкий код генерации запроса, и серверу работы больше, и для инъекций шансы могут появиться, если синтаксис достаточно богатый.

А не верите японцам вы зря - всё открыто и уже опробовано массой народу.

Ответить | Правка | ^ к родителю #18 | Наверх | Cообщить модератору

31. "Bullet Cache - высокопроизводительная система кэширования да..."  +2 +/
Сообщение от Грустный Анон on 18-Окт-11, 16:48 
Классический пример "слышал звон, да не знаю где он" - основная нагрузка, за исключением выборки данных, приходится на query optimizer & planner, а не на разбор запроса, sql синтаксис тут совершенно не при чём.
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

34. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Crazy Alex (ok) on 18-Окт-11, 17:13 
Смеётесь? Нет там никакой нагрузки на планировщик при выборке по первичному ключу.
Ответить | Правка | ^ к родителю #31 | Наверх | Cообщить модератору

25. "Bullet Cache - высокопроизводительная система кэширования да..."  +3 +/
Сообщение от Crazy Alex (??) on 18-Окт-11, 16:03 
Тьфу, зря только ругался с неграмотными людьми. Скачал исходники, глянул - никакого SQL-like syntex там нет, а есть набор API-функций и бинарный протокол, как и должно быть. Больше того - вот что пишет разработчик: "The network protocol will be binary. Empirically, too much time is spent in parsing text protocols in memcached and sqlcached."

Чушь об SQL-подобном виде взята вот отсюда:
Among others, Bullet cache implements the following multiple-data instructions which act on the record tags (described semantically in a SQL-like way):

GET RECORDS WHERE tag_key=... AND tag_values IN (...)
DELETE RECORDS WHERE tag_key=... AND tag_values IN (...)

Другими словами, разработчик не стал приводить свои функции API, а показал иллюстрацию в SQL-подобном синтаксисе.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

38. "Bullet Cache - высокопроизводительная система кэширования да..."  –3 +/
Сообщение от Аноним (??) on 18-Окт-11, 20:10 
Да Да. Только все сразу поняли о чем речь а вы нет.
Ответить | Правка | ^ к родителю #25 | Наверх | Cообщить модератору

43. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Crazy Alex (ok) on 20-Окт-11, 01:48 
Вы первоначальный текст новости не застали.
Ответить | Правка | ^ к родителю #38 | Наверх | Cообщить модератору

44. "Bullet Cache - высокопроизводительная система кэширования да..."  +/
Сообщение от Аноним (??) on 20-Окт-11, 23:06 
Библиотеки под Python пока нет:

http://mdcached.svn.sourceforge.net/viewvc/mdcached/trunk/md...

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру