Python 在NoSQL中存储相册的内容

Python 在NoSQL中存储相册的内容,python,nosql,amazon-dynamodb,Python,Nosql,Amazon Dynamodb,关于这个问题: 在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'

关于这个问题:

在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'
这将从相册“家庭度假”中检索所有照片的列表

我想到的一种方法是创建一个名为“albums”的表,并在value字段中存储所有照片的照片ID。例如:

{_id:'Family Vacation',
 values:'25, 512, 6172, 16923, 168253, 79185892'}
然后对这些值中的每一个执行多选,以将照片ID查找到实际的照片项目。这是一个好方法吗

{
   "_id": ObjectId("4f30153eecd1ab7c49ded566"),
   "album": "Family Vacation",
   "photo": "25"
},
{
   "_id": ObjectId("4f30153eecd1ab7c49ded565"),
   "album": "Family Vacation",
   "photo": "512"
}
单独存储每张照片,如果您想在某个时候添加更多照片信息,如标题,则更易于管理。还要考虑使用ID来参考你的相册。然后,您可以执行以下操作:


->查找(数组(“相册”=>“家庭假期”)

Stur,如果我错了,请更正,但按列筛选将执行完整表扫描,对吗? 如果是这样的话,我相信Ensnare提出的解决方案在数据量更大的情况下会更有效

Ensnare,假设对于标记,您使用dynamodb,您可以使用一组整数作为照片ID,但是您需要使用每行64kb的限制


您还可以使用相册名称作为主键,使用photoid作为范围键来创建二级索引。

上面的模式适用于名为“albums”的表,它们在NoSQL中称为集合,但可以创建名为albums的新集合。此外,集合是无模式的,我不认为在NoSQL中将照片id存储为逗号分隔的字符串有任何好处。它违反了1NF,因此您会遇到各种各样的问题-无法对选择进行排序,无法确保数据类型,更不用说能够从相册中添加/删除照片。在dynamoDB中(假设他使用它),不需要逗号分隔,您可以使用字符串集或数字集(但不确定它内部如何处理)。但我认为你是对的,有一些大的复杂性,订单和添加/删除肯定会很痛苦。那么解决办法就是创建自己的二级索引,你同意吗?