搜尋

首頁  >  問答  >  主體

数据库 - 想做一个多tag的 系统用MongoDB好还是常规的MySQL好?

我想做一个活动系统,每个活动都有很多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如何查询?

阿神阿神2767 天前773

全部回覆(6)我來回復

  • PHP中文网

    PHP中文网2017-04-22 08:58:05

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

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

    MySQL沒有你想的那麼慢。

    回覆
    0
  • 黄舟

    黄舟2017-04-22 08:58:05

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

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-22 08:58:05

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

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-22 08:58:05

    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"]}
    }

    並建立對應的索引

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-22 08:58:05

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

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

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

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-22 08:58:05

    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就可以了。

    回覆
    0
  • 取消回覆