回答

收藏

适用于网络照相馆NoSQL数据架构

技术问答 技术问答 234 人阅读 | 0 人回复 | 2023-09-14

我正在寻找一种用于NoSQL相馆存储的适当数据结构。在我身上Web在应用程序中,一张照片可以是一张或多张相册的一部分。MySQL没有经验,但对键值存储几乎没有经验。' h+ [5 I* x: e, m2 @' O+ ~) z
使用MySQL,我将建立(3)表,如下所示:& C0 F# r1 C' k2 T  R, D0 ?% p
photos (photo_id,title,date_uploaded,filename)albums (album_id,title,photo_id)album_photo_map (photo_id,album_id)然后,检索5张最新照片(带相册数据)的列表,请执行以下查询:
4 i  q1 m/ Y( r' |7 j% p% TSELECT *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。)存储的外观如何?索引将如何工作?% j" G% J' e% O; L* F" _2 ~% t% I
                                                               
( [, [/ T/ n; e- b& T* J; A# A    解决方案:                                                               
5 f; A& a6 R3 o* p' m. Z                                                                使用mongodb lingo,您的集合可能如下:' p7 l( r/ P6 T" W$ i% Q
photos =                                                                                                                                                                                                                                                       _id: ObjectId(...),       title: "...",       date_uploaded: Date(...),       albums:            ObjectId(...),           ...        ...]albums =                                                                                                                                                                                                                                                       _id: ObjectId(...),       title: "..."    }搜索5张最新照片的过程如下:
  d; [; J! e0 |> var latest = db.photos.find({}).sort({date_uploaded:1}).limit(5);mongo没有服务器端连接,所以您必须获得所有最新的专辑,如下所示:3 G3 @4 R0 h1 c) {9 }0 Y8 l- b# s
> var latest_albums = latest.find({},{albums: 1});当然,你必须把它简化成一组。& N7 }* Z  P& x' u9 E
假如你只是把相册嵌入照片文档中,其实会更容易,因为它们很小:2 [6 D) ^2 l& d/ u# B8 T' I. t
photos =                                                                                                                                                                                                                                                       _id: ObjectId(...),       title: "...",       date_uploaded: Date(...),       albums:            {name: "family-vacation-2011",title: "My family vacation in 2010"},           ...        ...]然后查询是一样的,但你不必加入。查找相册中的所有照片,如下所示:0 u, b5 H& C$ ^, L8 N, C6 `
> db.photos.find({albums:{$elemMatch:{name: "family-vacation-2011"}}});
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则