Если у меня есть 2 сервера, пишущих в распределенную базу данных, есть ли вероятность того, что server1 добавил запись, но когда server2 ищет ее, он не может найти ее, потому что еще не реплицировал хотя кластер?
HBase, в частности, имеет гарантированную согласованность. Это означает, что после завершения операции записи записанные данные будут доступны всем клиентам. Эта операция записи, однако, не происходит мгновенно, поэтому ее необходимо учитывать.
Другие движки баз данных NoSQL, такие как Cassandra, поддерживают так называемую «конечную согласованность», которая обменивает абсолютную согласованность на скорость записи. Это означает, что часть данных, записанных в кластер, будет ВСЕГДА согласована между узлами, но это может занять некоторое время - как правило, этот период времени очень короткий. Более подробную информацию о таком обмене можно найти здесь .
Я предполагаю, что вы предпочли бы гарантированную согласованность HBase.
Кроме того, есть ли лучший способ сделать то, что я пытаюсь сделать?
Это зависит от того, как будут выглядеть ваши записи. Не могли бы вы предоставить больше информации о данных, которые вы будете хранить? Если ваши поля данных обслуживают модель документа - вам обычно требуются все поля при доступе к данным для данного ключа - тогда вы можете изучить различные хранилища данных на основе документов, такие как MongoDB. MongoDB предлагает различные уровни согласованности (по умолчанию, довольно удобно, для обеспечения согласованности, как HBase).
Если вы часто будете искать какое-то подмножество полей, хранящихся для каждого ключа, то HBase поможет минимизировать объем данных, отправляемых по сети, позволяя вам указать, какие столбцы вы хотите получить от сканируй или получай.
Будет ли один сервер ... без распределения работать лучше (я избегал его, потому что хотел решения, которое, если бы было слишком медленным, я мог бы просто добавить больше рабочих серверов для записи в базу данных, я не уверен, что мой производительность снизится, если я добавлю 100 рабочих для записи на один сервер)?
Механизмы распределенной базы данных, безусловно, будут работать лучше при одновременных операциях чтения / записи. Из-за вышеупомянутых свойств HBase считается сильным в сценариях с интенсивным чтением (записи не активны, пока они не синдицированы), в то время как Cassandra и другие, в конечном итоге, согласованные механизмы баз данных считаются сильными в сценариях с интенсивной записью (хотя последний выпуск Cassandra имеет видел значительный прирост производительности при чтении).
Традиционная база данных, работающая на одном сервере, пострадает, когда увеличится нагрузка чтения / записи, поскольку ей придется ставить в очередь как входящие соединения, так и операции с диском, как только они достигнут своих предельных значений скорости. Я считаю, что HBase (или MongoDB, если вы решите, что хранилище документов может работать на вас) наилучшим образом соответствует вашим потребностям в согласованности.