Я делаю мобильное приложение для iOS. Пользователь может создать учетную запись и загрузить строки. Это будет похоже на твиттер, вы можете подписываться на людей, иметь фотографии профиля и т. Д. Я не могу оценить базу пользователей, но если приложение начнет расти, общий набор данных может быть довольно большим.
Я храню фактические объекты на Amazon S3, а ключи в базе данных, перечисление ключей Amazon S3 выполняется медленно. Так что лучше для хранения ключей?
Это мои знания SimpleDB и DynamoDB:
SimpleDB:
- Дешевый
- Хорошо работает
- Предназначен для малых / средних наборов данных
- Может выполнять запросы с использованием выражений выбора
DynamoDB:
- Дорогостоящий
- Чрезвычайно масштабируемый
- Отлично выполняет; миллисекундный ответ
- Невозможно запросить
Насколько я понимаю, эти моменты верны, DynamoDB - это больше убийца. скорость и масштабируемость, SimpleDB больше ориентирован на запросы и цену (при этом обеспечивая хорошую производительность). Но если вы посмотрите на это так, что будет быстрее, если вы загрузите ВСЕ ключи из DynamoDB или выполните запрос выбора с помощью SimpleDB ... жестко, верно? Один использует невероятно быструю базу данных для загрузки лота (а затем мы должны сопоставить их), а другой использует базу данных с достаточно хорошей производительностью для запроса и загрузки нескольких правильных объектов. Итак, что быстрее:
DynamoDB загружает все и сопоставляет ИЛИ SimpleDB запрашивает и загружает это
(ПРИМЕЧАНИЕ: соответствие просто означает использование -rangeOfString
и сравнения строк, ничего энергоемкого или неэффективного по времени или чего-либо еще на стороне сервера)
Мои ключи S3 будут использовать этот формат для каждого типа объекта.
accountUsername: typeOfObject: randomGeneratedKey
Например. Если вы ссылаетесь на объект учетной записи
Рохан: Аккаунт: shd83SHD93028rF
Или изображение профиля:
Рохан: Профиль Фото: Nck83S348DD93028rF37849SNDh
У меня есть случайно сгенерированный ключ для уникальности, он ни на что не ссылается, он просто есть, чтобы ключи не повторялись, поэтому перекрывали два объекта.
В своем приложении я могу выбрать SimpleDB или DynamoDB, поэтому есть два варианта:
Используйте SimpleDB, сохраняйте ключи в формате, но не используйте формат для какой-либо ссылки, вместо этого используйте атрибуты, хранящиеся в SimpleDB. Итак, я храню ключ с такими атрибутами, как имя пользователя, тип и, возможно, другими, которые мне также нужно будет включить в формат ключа. Итак, если я хочу получить объект учетной записи от пользователя «Рохан». Я просто использую SimpleDB Select для запроса атрибута «имя пользователя» и атрибута «тип». (где я соответствую "счету")
DynamoDB, ключи хранилища и каждый ключ будут иметь иллюстрированный формат. Я просматриваю всю базу данных, возвращая каждый ключ. Затем получите ключ и воспользуйтесь преимуществом формата ключа, я могу использовать
-rangeOfString
, чтобы сопоставить те, которые я хочу, а затем загрузить с S3.
Кроме того, SimpleDB, очевидно, географически распределен, но как я могу это включить?
Итак, что быстрее и надежнее? Использование SimpleDB для запроса ключей с атрибутами. Или с помощью DynamoDB для хранения всех ключей, сканирования (загрузки всех ключей) и сопоставления, например, -rangeOfString
? Имейте в виду, что это всего лишь короткие ключи, которые являются указателями на объекты S3.
Вот мой последний вопрос, и количество объектов в базе данных будет зависеть от принятого ответа, если я:
- Создайте отдельный ключ / объект для каждого отдельного объекта, который есть у пользователя.
- Создайте ключ / объект аккаунта и храните всю информацию внутри него
Очевидно, что у этих двух вариантов будут разные преимущества и недостатки. Например, было бы быстрее получить, если бы все было отдельно, но это также более организовано и меньше по размеру набора данных для хранения его в одной учетной записи пользователя.
Так что ты думаешь?
Спасибо за помощь! Я назначил награду за это, действительно нужен ответ как можно скорее.