Подтвердить что ты не робот

MongoDB на сервере EC2 или AWS SimpleDB?

Какой сценарий имеет больший смысл - разместить несколько экземпляров EC2 с установленным MongoDB или, скорее, использовать веб-сервис Amazon SimpleDB?

При наличии нескольких экземпляров EC2 с MongoDB у меня возникает проблема установки экземпляра самостоятельно.

При использовании SimpleDB у меня есть проблема с блокировкой меня в структуре данных Amazons?

Каковы различия в развитии? Разве я не могу просто переключить DAO моих слоев обслуживания, чтобы либо написать MongoDB, либо AWS SimpleDB?

4b9b3361

Ответ 1

SimpleDB имеет некоторые ограничения масштабируемости. Вы можете масштабировать только по шкале, и она имеет более высокую задержку, чем mongodb или cassandra, у нее есть предел пропускной способности и она выше, чем другие. Масштабируемость - это ручная (вы должны оштрафовать).

Если вам нужны более широкие параметры запроса, и у вас высокая скорость чтения, и у вас не так много данных mongodb. Но для долговечности вам нужно использовать как минимум 2 экземпляра сервера mongodb как master/slave. В противном случае вы можете потерять последнюю минуту своих данных. Масштабируемость - ручная. Это намного быстрее, чем simpledb. Автопродажа реализована в версии 1.6.

Cassandra имеет слабые варианты запросов, но столь же прочен, как и postgresql. Это быстрее, чем mongo и быстрее при более высоком размере данных. Операции записи выполняются быстрее, чем операции чтения на кассандре. Он может автоматически масштабироваться, активируя экземпляры ec2, но вам нужно немного изменить файлы конфигурации (если я правильно помню). Если у вас есть терабайты данных, то кассандра - ваш лучший выбор. Нет необходимости очерчивать ваши данные, он был разработан с 1-го дня. У вас может быть любое количество копий для всех ваших данных, и если некоторые серверы мертвы, он автоматически вернет результаты из живых и распределит данные мертвого сервера другим. Он сильно виноват. Вы можете включить любое количество экземпляров, это намного проще, чем другие параметры. Он имеет сильные параметры .net и java. У них есть пул соединений, балансировка нагрузки, маркировка мертвых серверов,...

Другим вариантом является hasoop для больших данных, но это не так, как в режиме реального времени, как и другие, вы можете использовать hasoop для datawarehousing. Ни кассандра, ни монго не имеют транзакций, поэтому, если вам нужны транзакции, postgresql лучше подходит. Другим вариантом является Amazon RDS, но производительность плохая, а цена высокая. Если вы хотите использовать базы данных или simpledb, вам может понадобиться кэширование данных (например, memcached).

Для веб-приложений, если ваши данные небольшие, я рекомендую mongo, если это большая кассандра. Вам не нужен слой кеширования с монго или кассандра, они уже бывают быстрыми. Я не рекомендую simpledb, он также блокирует вас до Amazon, как вы сказали.

Если вы используете С#, java или scala, вы можете написать интерфейс и реализовать его для mongo, mysql, cassandra или чего-нибудь еще для уровня доступа к данным. Это проще в динамических языках (например, rub, python, php). Вы можете написать провайдера для двух из них, если хотите, и можете изменить хранилище, возможно, во время выполнения, только с изменением конфигурации, они все возможны. Разработка с mongo, cassandra и simpledb проще, чем база данных, и они свободны от схемы, это также зависит от используемой клиентской библиотеки/соединителя. Самый простой - это манго. В кассандре есть только один указатель на таблицу, поэтому вам нужно управлять другими индексами самостоятельно, но с добавлением 0,7 выпуска вторичных индексов cassandra будет возможно, как я знаю. Вы также можете начать с любого из них и заменить его в будущем, если вам нужно.

Ответ 2

Я думаю, у вас есть как вопрос времени, так и скорости.

MongoDB/Cassandra будут намного быстрее, но вам нужно будет инвестировать $$$, чтобы заставить их двигаться. Это означает, что вам нужно запустить/настроить экземпляры сервера для всех них и выяснить, как они работают.

С другой стороны, вам не нужно платить за "транзакцию" напрямую, вы просто платите за оборудование, которое, вероятно, более эффективно для крупных служб.

В Cassandra/MongoDB сражайтесь здесь, что вы найдете (на основе тестирования, с которым я лично занимаюсь в течение последних нескольких дней).

Cassandra:

  • Масштабирование/избыточность - очень ядро.
  • Конфигурация может быть очень интенсивной.
  • Чтобы сделать отчет, вам нужно уменьшить карту, для этого вам нужно запустить слой хаоса. Это была боль, которую нужно настроить, и болью, чтобы добиться успеха.

MongoDB:

  • Конфигурация относительно проста (даже для нового осколка, на этой неделе).
  • Резервирование по-прежнему "получает"
  • Map-reduce встроен и легко получить данные.

Честно говоря, учитывая время настройки, необходимое для наших 10-х ГБ данных, мы отправились вместе с MongoDB на наш конец. Я могу представить, используя SimpleDB для "должны получить эти запущенные" случаи. Но настройка node для запуска MongoDB настолько смехотворно проста, что может стоить пропустить маршрут "SimpleDB".

В терминах DAO уже имеется множество библиотек для Mongo. Рамка Thrift для Cassandra хорошо поддерживается. Вероятно, вы можете написать простую логику для абстрагирования соединений. Но сложнее абстрагироваться от вещей, более сложных, чем простой CRUD.

Ответ 3

Теперь через 5 лет нетрудно настроить Mongo на любой ОС. Документация легко следовать, поэтому я не вижу, как Монго как проблема. Другие ответы затрагивали вопросы масштабируемости, поэтому я постараюсь решить вопрос с точки зрения разработчика (какие ограничения имеют каждая система):

Я буду использовать S для SimpleDB и M для Mongo.

  • M написано на С++, S написано в Erlang (не самый быстрый язык)
  • M является открытым исходным кодом, установленным повсеместно, S является собственностью, может работать только на Amazon AWS. Вы также должны заплатить за целую группу сотрудников за S
  • S имеет целую кучу странные ограничения. M ограничения являются более разумными. Наиболее странные ограничения:
    • Максимальный размер домена (таблица) - 10 ГБ.
    • длина значения атрибута (размер поля) - 1024 байта.
    • максимальное количество элементов в ответе Select - 2500
    • максимальный размер ответа для выбора (максимальное количество данных S может вернуть вас) - 1Mb
  • S поддерживает только несколько языков (java, php, python, ruby,.net), M поддерживает путь больше
  • обе поддерживают REST
  • S имеет синтаксис запроса, очень похожий на SQL (но менее мощный). С помощью M вам нужно изучить новый синтаксис, который выглядит как json (также прямо изучать основы).
  • с M вам нужно узнать, как вы архитектируете свою базу данных. Поскольку многие люди думают, что схематичность означает, что вы можете выбросить какой-либо барахло в базу данных и извлечь ее с легкостью, они могут быть удивлены тем, что Junk in, Junk out maxim работает. Я предполагаю, что то же самое в S, но не может утверждать это с уверенностью.
  • оба не допускают регистр без учета регистра. В M вы можете каким-то образом использовать regex (уродливый/без индекса) преодолеть это ограничение без введения дополнительной логики поля ввода/приложения.
  • в S-сортировке можно выполнить только в одном поле
  • из-за 5s timelimit count в S может вести себя странно. Если прошло 5 секунд и запрос еще не закончен, вы получите частичное число и токен, который позволит продолжить запрос. Логика приложения отвечает за сбор всех этих данных подведением итогов.
  • все это строка UTF-8, что заставляет боль в заднице работать с не строковыми значениями (например, числа, даты ) в поддержке типа S.M путь более богатый.
  • у обоих нет транзакций и соединений
  • M поддерживает сжатие, что действительно полезно для магазинов nosql, где одно и то же имя поля сохраняется снова.
  • S поддерживает только один индекс, M имеет один, составной, многокварковый, геопространственный и т.д..
  • поддержка и репликация поддержки

Одна из самых важных вещей, которую вы должны учитывать, это то, что SimpleDB имеет очень рудиментарный язык запросов. Даже базовые вещи, такие как group by, sum average, distinct, а также обработка данных не поддерживаются, поэтому функциональность на самом деле не намного богаче, чем Redis/Memcached. С другой стороны, Mongo поддерживает богатый язык запросов.