ens*_*are 20 python sql nosql amazon-dynamodb
我正在寻找为照片库的NoSQL存储构建适当的数据结构.在我的网络应用程序中,照片可以是一个或多个相册的一部分.我有使用MySQL的经验,但几乎没有使用键值存储.
使用MySQL,我会设置(3)表如下:
photos (photo_id, title, date_uploaded, filename)
albums (album_id, title, photo_id)
album_photo_map (photo_id, album_id)
Run Code Online (Sandbox Code Playgroud)
然后,要检索5张最新照片(包含相册数据)的列表,请执行以下查询:
SELECT *
FROM albums, photos, album_photo_map
WHERE albums.album_id = album_photo_map.album_id AND
photos.photo_id = album_photo_map.photo_id
ORDER BY photos.date_uploaded DESC LIMIT 5;
Run Code Online (Sandbox Code Playgroud)
如何使用NoSQL键值对数据库完成类似的查询?(具体来说,亚马逊的DynamoDB.)存储会是什么样子?索引如何工作?
nfi*_*ine 12
使用mongodb lingo,您的集合可能如下所示:
photos = [
{
_id: ObjectId(...),
title: "...",
date_uploaded: Date(...),
albums: [
ObjectId(...),
...
]
},
...
]
albums = [
{
_id: ObjectId(...),
title: "..."
}
]
Run Code Online (Sandbox Code Playgroud)
找到5张最新照片就像这样:
> var latest = db.photos.find({}).sort({date_uploaded:1}).limit(5);
Run Code Online (Sandbox Code Playgroud)
在mongo中没有服务器端连接,所以你必须获取所有最新的专辑,如下所示:
> var latest_albums = latest.find({}, {albums: 1});
Run Code Online (Sandbox Code Playgroud)
当然,你必须把它煮成一套.
如果你只是将相册嵌入到照片文档中,这实际上更容易,因为它们很小:
photos = [
{
_id: ObjectId(...),
title: "...",
date_uploaded: Date(...),
albums: [
{name: "family-vacation-2011", title: "My family vacation in 2010"},
...
]
},
...
]
Run Code Online (Sandbox Code Playgroud)
然后查询是一样的,但你不必加入.查找相册中的所有照片如下:
> db.photos.find({albums:{$elemMatch:{name: "family-vacation-2011"}}});
Run Code Online (Sandbox Code Playgroud)