дороги ли операции чтения на Riak?

Просматривая рассказ Basho Vimeo о Voxer, Мэтт сказал, что «Операции чтения очень дорогие».

Когда происходит чтение, Riak использует своего рода кворум, чтобы выбрать, какой узел предоставит данные?

Riak не имеет хозяина, поэтому каждый узел должен содержать одни и те же данные, не так ли? (Очевидно, после окна несогласованности, которое возникает из-за возможной согласованности)

Спасибо


person CHAPa    schedule 21.07.2012    source источник


Ответы (1)


Вы немного не понимаете, о чем он говорит; он говорит о вращающихся дисках и расходах на чтение с них. Это не проблема Riak.

У них огромное количество данных, которые не могут поместиться в памяти. Он слишком велик даже для того, чтобы легко использовать твердотельные накопители, потому что они не могут втиснуть достаточное количество их в сервер с их текущими ограничениями по размеру (вот почему они перешли от от твердотельных накопителей к вращающимся дискам, как он утверждает в его речь).

Если вы не используете базу данных в памяти (которой не является Riak, если вы не используете серверную часть в памяти), как Мэтт утверждает в этом разделе своего выступления, вы просто ограничены количеством операций ввода-вывода в секунду. диск может дать вам, если вам нужно читать с диска. Нет никакого способа обойти это; вы читаете с диска. Далее он заявляет, что вы хотите кэшировать все, что можете, чтобы помочь с этим.

Примерно так это работает, независимо от платформы базы данных, которую вы используете, когда дело доходит до обращения к дискам; бесплатного обеда нет :)

Если вы используете Riak и ваш набор данных превышает объем доступной памяти, вам придется читать с диска при «промахе кеша». Riak полагается на дисковый кеш базовой ОС, если вы используете серверную часть Bitcask по умолчанию — другие серверные части могут делать это или не делать, а вместо этого выполняют собственное кэширование в памяти.

Что касается вашего вопроса относительно данных об узлах... Riak не имеет мастера и изначально основан на документе Amazon Dynamo. Мы используем последовательное хеширование для распределения данных по кольцу с репликами, которые затем записываются на соседние узлы, контролируемые «значением N», которое вы настраиваете (и это настраивается для каждого сегмента и даже для каждого запроса). Когда вы читаете, этот же метод хеширования используется для определения того, на каком узле «живут» данные.

Чтение будет считываться из (n_val/2) + 1 узлов по умолчанию, но вы можете настроить это для каждого запроса в соответствии с вашими потребностями. При окончательной согласованности нет гарантии, что данные на этих узлах будут одинаковыми в момент времени, когда вы выполняете чтение, и вам может потребоваться выполнить разрешение конфликтов в зависимости от вашей бизнес-логики. При этом следует понимать, что количество времени, в течение которого что-то несовместимо, измеряется в миллисекундах при нормальных операциях (например, у вас нет сетевого раздела или узла, восстанавливающегося после сбоя).

У нас есть тонна информации об этих вещах, доступной на нашем веб-сайте, и мы очень стараемся систематизировать ее, чтобы ее было легко найти. В частности, вы можете посмотреть на Riak — кластеризация, чтобы узнать, как распределяются данные.

person Brian Roach    schedule 21.07.2012
comment
Брайан, действительно спасибо! Я рассматриваю возможность использования Riak в своем проекте и действительно не понимаю, что сказал Мэтт. - person CHAPa; 22.07.2012
comment
R = количество узлов, с которыми связываются при доступе к объекту данных через операцию чтения, верно? Что происходит, когда R = 2 и эти узлы имеют разные данные! Операция чтения завершится ошибкой? - person CHAPa; 28.07.2012
comment
@CHAPa - Нет, тогда вы будете разрешать конфликты на стороне клиента и захотите записать разрешенный объект обратно в Riak. Сбой произойдет только в том случае, если R узлов не удастся прочитать (например, они не работают или недоступны). - person Brian Roach; 28.07.2012
comment
Еще раз спасибо, Брайан. Таким образом, с 3 узлами, R = 2 и W = 2, это не означает строгой согласованности R + W > N (что я понимаю о сильном, так это все узлы с одинаковыми данными, я ошибаюсь?). Один узел может находиться в другом состоянии по сравнению с другими 2, не так ли? Спасибо тебе за твое терпение - person CHAPa; 29.07.2012
comment
Нет - бывает. Перечитывая мой ответ выше, я, возможно, немного смутил вас тем, что в игре есть две вещи: как Riak выполняет свою репликацию и как ваше приложение чередует чтение и запись, вызывая одноуровневые записи на основе векторных часов, я думаю, что запутал их немного. Наша страница о согласованности объясняет первое и рассказывает о том, как работают значения R и W: wiki.basho. com/Eventual-Consistency.html - person Brian Roach; 29.07.2012