資料庫 - 想做一個多tag的 系統用MongoDB好還是常規的MySQL好?
阿神
阿神 2017-04-22 08:56:05
0
6
796

我想做一個活動係統,每個活動都有很多tag, 當然有參加的人數,時間,地點。最近學習了mongodb 感覺如果用mongo會很方便: meeting table:

{_id: 42, name: "someName", tags: ["chicken", "parrot", "hovercraft"]}

person table:

{_id: "somebody@gmail.com", name:"LiMing", phone:"1381671537"}

person activity table:

{_id:56, person: "somebody@gmail.com", eventid: 42}

每個活動都會有很多人參加。我不知道如果係統大了,特別是參加的多了用mongodb好呢,還是用傳統數據庫mySQL好呢? 還有查詢效率,比如:

db.meeting.find({tags:{$in:["tag2", "tag1"]}});

這樣高麼? 傳統數據庫要用多對多表,不知道傳統查詢速度高還是直接用mongoDB這樣速度快。 本來想設計成一張表,如果活動人很多人參加 比如 person有 200人,會不會降低效率?有時候怕加人減人台頻繁會不會有鎖的問題,比如同時添加多個人到某此活動中? mongoDB多個表join如何查詢?

阿神
阿神

闭关修行中......

全部回覆(6)
洪涛

資料量大,要花大力氣搞的話 可以考慮 MySQL 和 Sorl 結合。

資料量不大,完全可以考慮把tag當作一個分類去做,保存在MySQL。

MySQL沒有你想的那麼慢。

黄舟

mongodb吧。沒有原因,就是喜歡。

大家讲道理

這種明顯MongoDB好啊,用關聯式資料庫搞這個,簡直是遭罪

左手右手慢动作

mongoDB 模型設計最好不像那樣設計,應該像下面

meeting table:
{_id: 42, name: "someName", tags: ["chicken", "parrot", "hovercraft"]}

person table:
{_id: "somebody@gmail.com", name:"LiMing", phone:"1381671537"}

person activity table:
{_id:56, person:
{_id: 42, name: "someName", tags: ["chicken", "parrot", "hovercraft"]},
event: {_id: 42, name: "someName", tags: ["chicken", "parrot", "hovercraft"]}
}

並建立對應的索引

Ty80

只有一點兒忠告:別用自己駕馭不了的技術

哪個熟悉,哪個比較精通,就用哪個。

如果兩者都沒用過,可以考慮 MongoDB。

左手右手慢动作

Tag系統的話,感覺用redis會比較方便一點。對於這個問題,在redis裡面可以用SET就可以了。

http://redis.io/topics/data-types

Redis Sets are good to represent relations. You can create a tagging system with Redis using a Set to represent every tag. Then you can add all the IDs of all the objects having a 做 you can add all the IDs of all the objects having a ven tag ins Set partic SADD command. Do you want all the IDs of all the Objects having a three different tags at the same time? Just use SINTER.

如果你其他部分使用mongo的話,單獨的實時更新的tag增減和某個tag中對於event的增減也可以用redis。

如果要記錄每個tag的被採納次數,再加一個以tag文字為key,以採納數為value的HASH就可以了。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板