Хранение содержимого фотоальбома в NoSQL - PullRequest
1 голос
/ 06 февраля 2012

В дополнение к этому вопросу:

Правильная схема данных NoSQL для веб-галереи фотографий

В MySQL получение содержимого альбома будетвыглядело бы так:

SELECT photos.*, albums.album_title
FROM photos, albums_to_photos, albums
wHERE albums_to_photos.photo_id = photos.photo_id AND
      albums_to_photos.album_id = albums.album_id AND
      album_title = 'Family Vacation'

Это позволило бы получить список всех фотографий из альбома "Семейные каникулы"

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

{_id:'Family Vacation',
 values:'25, 512, 6172, 16923, 168253, 79185892'}

И затем выполнить множественный выбор для каждого из этих значений, чтобы найти идентификаторы фотографий для реальных элементов фотографий.Это хороший подход?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2012

Stur, поправьте, если я ошибаюсь, но фильтр по столбцу выполнит полное сканирование таблицы, верно?Если это так, я считаю, что решение, представленное Ensnare, будет работать лучше с большими данными.

Ensnare, предполагая, что для тега вы используете Dynamodb, вы можете использовать набор целых чисел для идентификатора фотографии, но выпотребуется работать с ограничением 64 КБ на строку.

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

0 голосов
/ 06 февраля 2012
{
   "_id": ObjectId("4f30153eecd1ab7c49ded566"),
   "album": "Family Vacation",
   "photo": "25"
},
{
   "_id": ObjectId("4f30153eecd1ab7c49ded565"),
   "album": "Family Vacation",
   "photo": "512"
}

Храните каждую фотографию отдельно, если вы хотите в какой-то момент добавить дополнительную информацию о фотографии, например, названия, которыми легче управлять. Также рассмотрите возможность использования идентификаторов для ссылки на ваши альбомы. Тогда вы можете сделать что-то вроде:

-> find (array ("album" => "Family Vacation"))

...