DynamoDB vs MongoDB NoSQL
Я пытаюсь понять, что я могу использовать для будущего проекта, мы планируем хранить около 500 тыс. записей в месяц в первый год и, возможно, больше в течение следующих лет это вертикальное приложение, поэтому нет необходимости использовать базу данных для этого, поэтому я решил выбрать хранилище данных noSQL.
первый вариант, который пришел мне на ум, был mongo db, так как это очень зрелый продукт с большой поддержкой со стороны сообщества, но с другой стороны мы получили бренд новый продукт, который предлагает управляемый сервис с максимальной производительностью, я разработаю это приложение, но нет плана обслуживания (по крайней мере, на данный момент), поэтому я думаю, что это будет огромным преимуществом, поскольку amazon предоставляет эластичный способ масштабирования.
моя основная проблема связана со структурой запросов, я еще не смотрел на возможности запросов dynamoDB, но поскольку это хранилище данных k/v, я чувствую, что это может быть более ограниченным, чем Mongo db.
Если у кого-то был опыт перемещения a проект от mongoDB до DynamoDB, любые советы будут полностью оценены.
8 ответов:
недавно я перенес свой MongoDB в DynamoDB и написал 3 блога, чтобы поделиться некоторым опытом и данными о производительности, стоимости.
миграция с MongoDB на AWS DynamoDB + SimpleDB
Я знаю, что это старый, но он все еще приходит, когда вы ищете для сравнения. Мы использовали Монго, перешли почти полностью в "Динамо", которое сейчас является нашим первым выбором. Не потому, что она имеет больше возможностей, это не так. Монго лучше язык запросов, можно индексировать в структуре, есть много мелочей. Превосходство "Динамо" заключается в том, что ОП заявил в своем комментарии: это легко. Вам не нужно заботиться о каких-либо серверах. Когда вы начинаете настраивать решение с монго-шаром, все усложняется. Вы можете пойти в одну из хостинговых компаний, но это тоже не дешево. С "Динамо", если вам нужно больше пропускной способности, вы просто нажмите кнопку. Вы можете писать сценарии для автоматического масштабирования. Когда пришло время обновить Динамо, это сделано для вас. То есть все много драгоценного стресса и времени не потрачено. Если у вас нет преданных своему делу людей, то "Динамо" - это отлично.
Так что теперь мы идем на Динамо по умолчанию. Монго может быть, если структура данных достаточно сложна, чтобы но тогда мы, вероятно, вернемся к базе данных SQL. Динамо тупое, вам действительно нужно подумать о том, как вы собираетесь его построить, и, вероятно, вы будете использовать Redis в Elasticcache, чтобы заставить его работать для сложных вещей. Но это, конечно, хорошо, чтобы не заботиться о нем. Вы кодируете. Вот и все.
с 500k документов, нет никаких причин для масштабирования вообще. Типичный ноутбук с SSD и 8 ГБ оперативной памяти может легко сделать 10s миллионов записей, так что если вы пытаетесь выбрать из-за масштабирования ваш выбор на самом деле не имеет значения. Я бы предложил вам выбрать то, что вам больше всего нравится, и, возможно, где вы можете найти самую онлайн-поддержку.
для быстрого сравнения обзор, мне очень нравится этот сайт, который имеет много страниц сравнения, например AWS DynamoDB vs MongoDB;http://db-engines.com/en/system/Amazon + DynamoDB%3BMongoDB
короткий ответ: начните с SQL и добавьте NoSQL только тогда, когда/если это необходимо. (если вам не нужно ничего, кроме очень простых запросов)
мой личный опыт: я не использовал MongoDB для запросов, но по состоянию на апрель 2015 года DynamoDB все еще очень искалечен, когда речь заходит о чем-либо, кроме самых основных запросов ключей/значений. Я люблю его за основные вещи, но если вы хотите язык запросов, то посмотрите на реальное решение базы данных SQL.
в DynamoDB вы можете запросить хэш или хэш и ключ диапазона, и вы можете иметь несколько вторичных глобальных индексов. Я делаю запросы к одной таблице с 4 возможными параметрами фильтра и сортирую результаты, это поддерживается (едва) за счет использования глобальных вторичных индексов с выражениями фильтра. Проблема возникает, когда вы пытаетесь получить общие результаты, соответствующие фильтру, вы не можете просто искать первые 10 элементов, соответствующих фильтру, а скорее он проверяет 10 элементов, и вы можете получить 0 действительных результатов, заставляя вас сохранить повторное сканирование из ключа continue-боль в шее и потребляет слишком много квоты чтения таблицы для простого сценария.
чтобы быть конкретным о проблеме предела с фильтрами в запросе, это из документов (http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#ScanQueryLimit):
In a response, DynamoDB returns all the matching results within the scope of the Limit value. For example, if you issue a Query or a Scan request with a Limit value of 6 and without a filter expression, the operation returns the first six items in the table that match the request parameters. If you also supply a FilterExpression, the operation returns the items within the first six items in the table that match the filter requirements.мой вывод заключается в том, что запросы, включающие FilterExpressions, используются только в очень редких случаях и не масштабируются, потому что каждый запрос может легко прочитать большую часть или всю вашу таблицу, которая потребляет слишком много единиц чтения DynamoDB. Как только вы используете слишком много единиц чтения, вы получите дросселирование и увидите низкую производительность.
экспертное мнение: на саммите AWS 9 апреля 2015 года Бретт Холлман, менеджер, архитектура решений, AWS в своем выступлении по scalling для ваших первых 10 миллионов пользователей выступает за то, чтобы начать с базы данных SQL, а затем использовать NoSQL только тогда, когда и если это имеет смысл. Потому что рано или поздно вы, вероятно, нужен SQL-сервер где-то в стеке. Его слайды здесь: http://www.slideshare.net/AmazonWebServices/deep-dive-scaling-up-to-your-first-10-million-users Смотрите слайд 28.
мы выбрали сочетание Монго / Динамо для продукта здравоохранения. В основном mongo позволяет лучше искать, но размещенное Динамо отлично, потому что его HIPAA соответствует без какой-либо дополнительной работы. Таким образом, мы размещаем часть mongo без персональных данных в стандартной настройке и позволяем amazon иметь дело с частью HIPAA с точки зрения инфраструктуры. Мы можем запросить определенные элементы из mongo, которые вызывают документы с указателями (идентификаторами) соответствующего документа Dynamo.
главная причина мы решили сделать это с помощью mongo вместо размещения всего приложения на Динамо было по 2 причинам. Во-первых, нам нужно было предварительно сформировать поиск по местоположению, который монго велик в то время, Динамо не было, но теперь у них есть возможность.
во-вторых, некоторые документы были неструктурированными, и мы не знали заранее, какими будут данные, поэтому, например, скажем, пользователь A вводит документ в коллекцию "форма" следующим образом: {"имя пользователя": "user1", " электронная почта": "[email protected]"}. А другой пользователь ставит об этом в этой же коллекции {"телефон": "813-555-3333", "расположение": [28.1234,-83.2342]}. С mongo мы можем искать любое из этих динамических и неизвестных полей в любое время, с Dynamo вы можете это сделать, но вам придется делать индекс каждый раз, когда добавляется новое поле, которое вы хотите найти. Поэтому, если у вас никогда не было поля телефона в вашем документе Динамо раньше, а затем вдруг кто-то добавляет его, его совершенно невозможно найти.
теперь это поднимает еще один момент, о котором вы упомянули. Иногда выбор правильного решения для работы не всегда означает выбор лучшего продукта для работы. Например, у вас может быть клиент, который нуждается и будет использовать созданную вами систему в течение 10+ лет. Переход на решение SaaS/IaaS, которое достаточно хорошо, чтобы выполнить работу, может быть лучшим вариантом, поскольку вы можете положиться на amazon, чтобы поддерживать и поддерживать свои системы в течение длительного времени.
Я работал над обоими и своего рода поклонником обоих.
но вы должны понимать, когда использовать что и с какой целью.
Я не думаю, что это отличная идея, чтобы переместить всю вашу базу данных в DynamoDB, причина быть запрос трудно, за исключением первичных и вторичных ключей, индексирование ограничено и сканирование в DynamoDB является болезненным.
Я бы пошел на гибридный вид БД, где должны быть обширные данные для запросов, есть MongoDB, со всеми его функциями никогда не чувствовал бы себя обязанным предоставлять улучшения или модификации.
DynamoDB молниеносно (быстрее, чем MongoDB), поэтому DynamoDB часто используется в качестве альтернативы сеансам в масштабируемых приложениях. Рекомендации DynamoDB также предполагают, что если есть много данных, которые используются меньше, переместите их в другую таблицу.
Итак, предположим, у вас есть статьи или новости. Люди, скорее всего, будут искать вещи на прошлой неделе или в этом месяце. шансы действительно редки для людей, чтобы посетить двухлетние данные. Для этих целей DynamoDB предпочитает хранить данные по месяцам или годам в разных таблицах.
DynamoDB кажется масштабируемым, что-то вам придется делать вручную в MongoDB. однако вы потеряете на производительности в DynamoDB, если вы не понимаете о разделе пропускной способности и, как масштабирование работает за сценой.
DynamoDB должен использоваться там, где скорость критична, MongoDB с другой стороны имеет слишком много рук и особенности, чего-то DynamoDB не хватает.
например, вы можете иметь набор реплик MongoDB таким образом, что одна из реплик содержит экземпляр данных 8(или любой другой) часов. Очень полезно, если вы испортили что-то в БД и получить данные, как это раньше.
но это мое мнение.
имейте в виду, я только экспериментировал с MongoDB...
из того, что я читал, DynamoDB прошел долгий путь с точки зрения возможностей. Раньше это было супер-базовое хранилище ключей и значений с чрезвычайно ограниченными возможностями хранения и запросов. С тех пор он вырос, теперь поддерживая большие размеры документа + поддержка JSON и глобальные вторичные индексы. Разрыв между тем, что DynamoDB и MongoDB предлагает с точки зрения возможностей, с каждым месяцем становится все меньше. Новый возможности DynamoDB расширены на здесь.
большая часть сравнений MongoDB и DynamoDB устарела из-за недавнего добавления функций DynamoDB. Однако,этот пост предлагает некоторые другие убедительные моменты для выбора DynamoDB, а именно, что это простое, низкое обслуживание и часто низкая стоимость. еще одно обсуждение здесь выбор базы данных было интересно читать, хотя немного старый.
мой вывод: если вы делаете серьезные запросы к базе данных или работа на языках, не поддерживаемых DynamoDB, используйте MongoDB. В противном случае, придерживайтесь DynamoDB.
Comments