|
我正在寻找一种用于NoSQL相馆存储的适当数据结构。在我身上Web在应用程序中,一张照片可以是一张或多张相册的一部分。MySQL没有经验,但对键值存储几乎没有经验。
; L n+ v5 g8 i" G9 B. g/ ?1 P使用MySQL,我将建立(3)表,如下所示:
7 G" a6 K; u y- x% \/ g, _' X; gphotos (photo_id,title,date_uploaded,filename)albums (album_id,title,photo_id)album_photo_map (photo_id,album_id)然后,检索5张最新照片(带相册数据)的列表,请执行以下查询:3 F* [* F, W$ o' Z" {, t
SELECT *FROM albums,photos,album_photo_mapWHERE albums.album_id = album_photo_map.album_id AND photos.photo_id = album_photo_map.photo_idORDER BY photos.date_uploaded DESC LIMIT 5;如何使用NoSQL键值类似于数据库的查询?(尤其是Amazon的DynamoDB。)存储的外观如何?索引将如何工作?' K+ A1 ]$ H. K; y2 O8 Z( h4 h
2 y! ~/ s: \" V4 o) V( }* T! x- _5 m 解决方案:
% t G. O7 f# s) b- n6 y 使用mongodb lingo,您的集合可能如下:
# B5 B5 ^/ _# r" mphotos = _id: ObjectId(...), title: "...", date_uploaded: Date(...), albums: ObjectId(...), ... ...]albums = _id: ObjectId(...), title: "..." }搜索5张最新照片的过程如下:" s9 l- K9 X$ P
> var latest = db.photos.find({}).sort({date_uploaded:1}).limit(5);mongo没有服务器端连接,所以您必须获得所有最新的专辑,如下所示:9 [3 H$ i: G) Q* G/ @; L J4 w
> var latest_albums = latest.find({},{albums: 1});当然,你必须把它简化成一组。; p% Y$ J, c6 A% U3 R h( ^6 v
假如你只是把相册嵌入照片文档中,其实会更容易,因为它们很小:1 g( V4 G" {. H) I" K" ^5 W& V$ b
photos = _id: ObjectId(...), title: "...", date_uploaded: Date(...), albums: {name: "family-vacation-2011",title: "My family vacation in 2010"}, ... ...]然后查询是一样的,但你不必加入。查找相册中的所有照片,如下所示:
4 X" T. D" J) Q# N, a/ }( z> db.photos.find({albums:{$elemMatch:{name: "family-vacation-2011"}}}); |
|