Aerospike ACID осветление

База данных Aerospike говорит, что это

[...] разработан с тремя ключевыми целями:
Создать гибкую, масштабируемую платформу, которая соответствовала бы потребностям современных веб-приложений
Обеспечить устойчивость и надежность (например, ACID), ожидаемые от традиционных баз данных .
Чтобы обеспечить эффективность работы (минимальное ручное вмешательство)

И в другом месте:

Aerospike оптимизирован для работы с новейшими технологиями хранения и баз данных, чтобы максимально сократить пропускную способность транзакций, при этом гарантируя строгую согласованность (ACID).

Во-первых, я не нашел определения транзакции в Aerospike. Обычно я получаю это как последовательность операций в базе данных. Однако, читая позже, я не вижу, что транзакции являются ACID:

При чтении подробного описания Aerospike ACID я обнаружил, что это всего лишь притворяется. КИСЛОТА гарантирует.

Примеры:

  • Я хочу сделать последовательность операций (a, b, c) в транзакции. Каждая операция является независимым запросом к БД. Если c не удается, я хочу, чтобы a и b были отброшены системой БД. Я не нашел эту функцию в Aerospike.
  • Рассмотрим две параллельные транзакции, изменяющие документы A и B. В начале A=0 и B=0:

    • T1 adds 1 to A and B
    • T2 умножьте A и B на 2.

    Я ожидаю, что всегда мы получим A==B - результат будет либо:

    • A=1 & B=1 когда T2 впервые заблокирует/вступит во владение документами A и B
    • A=2 & B=2 когда T2 впервые заблокирует/вступит во владение документами A и B

    Какова гарантия этого результата?

<сильный>1. Можете ли вы подтвердить мои результаты моих примеров?

<сильный>2. Помогают ли здесь определяемые пользователем функции?

PS

Чтобы было ясно - я не хочу сказать, что Aerospike плохой. Я вижу там отличный кусок хорошей работы. Мне просто не хватает хороших разъяснений, когда гарантии ACID не работают.


person Robert Zaremba    schedule 18.09.2014    source источник


Ответы (1)


Как указано в нижней части страницы 2 документа, на который вы ссылались: http://www.aerospike.com/docs/architecture/assets/AerospikeACIDSupport.pdf

и в нашей документации на веб-сайте, на который вы указали: http://www.aerospike.com/acid.

Для операций чтения/записи с одной записью Aerospike дает строгие гарантии атомарности этих операций:

Если вы продолжаете читать любой из источников, они учитывают все свойства ACID атомарности, согласованности, изоляции и долговечности применительно к одной записи.

В базах данных NoSQL термин ACID обычно используется для обозначения нескольких копий записи в среде одного распределенного (кластерного) сервера, и что все копии одной и той же записи записываются в КИСЛОТНЫМ способом. Несколько копий записи хранятся в распределенной базе данных для обеспечения высокой доступности и отказоустойчивости. Большинство наших производственных клиентов довольствуются двумя копиями из-за надежного характера нашей базы данных.

Aerospike выполняет это в рамках одного кластеризованного экземпляра базы данных. Если вы решите иметь несколько кластеризованных экземпляров в разных местах/центрах обработки данных (для стратегии геолокации или аварийного восстановления), мы обязуемся соблюдать требования ACID для только отдельного экземпляра базы данных.

Наш XDR (кросс-репликация центра обработки данных) будет автоматически реплицировать запись на удаленные экземпляры Aerospike в других местах для вас, поэтому наш процесс отправки записей в другие места будет отображаться как клиент Aerospike для удаленного экземпляра, и опять же, соответствие ACID для отправки одной записи в удаленный экземпляр. Это происходит порядка нескольких секунд для учета сетевых задержек и других факторов, не зависящих от Aerospike. Мы НЕ поддерживаем ACID в нескольких экземплярах/географиях.

В настоящее время у Aerospike нет API управления транзакциями, поэтому даже использование пользовательских функций (UDF) не позволит вам откатить серию шагов, как вы описали в своем примере, в случае сбоя одного из шагов. Aerospike никогда не заявляла об этом, но, как это часто бывает в индустрии высоких технологий, слова используются в разных контекстах, и ситуации легко запутать.

person Susan Lee    schedule 18.09.2014
comment
Дополнительные обсуждения можно найти: обсудить. aerospike.com/t/ - person kporter; 19.09.2014
comment
Спасибо. Я ценю ваше объяснение. Я знал о части single record, но затем в связанных документах обычно используется транзакция без определения. Каждая БД имеет свою спецификацию дизайна, которая обеспечивает приятные функции/скорость/безопасность... Моя цель с этим вопросом состояла в том, чтобы избежать путаницы и иметь четкое представление о соответствии ACID (обычно - sql dbs). - person Robert Zaremba; 19.09.2014