数据库 - 想做一个多tag的 系统用MongoDB好还是常规的MySQL好?
阿神
阿神 2017-04-22 08:56:05
0
6
800

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

阿神
阿神

闭关修行中......

membalas semua(6)
洪涛

Jika jumlah data adalah besar dan memerlukan banyak usaha, anda boleh mempertimbangkan untuk menggabungkan MySQL dan Sorl.

Jumlah data tidak besar, jadi anda boleh mempertimbangkan untuk menggunakan teg sebagai kategori dan menyimpannya dalam MySQL.

MySQL tidak lambat seperti yang anda fikirkan.

黄舟

mongodb. Tiada sebab, saya suka sahaja.

大家讲道理

MongoDB jelas bagus, tetapi menggunakan pangkalan data hubungan untuk melakukan ini adalah bencana

左手右手慢动作

Reka bentuk model MongoDB sebaiknya tidak direka seperti itu, ia sepatutnya seperti berikut

meja mesyuarat:
{_id: 42, nama: "someName", tag: ["ayam", "parrot", "hovercraft"]}

jadual orang:
{_id: "somebody@gmail.com", nama:"LiMing", telefon:"1381671537"}

jadual aktiviti orang:
{_id:56, orang:
{_id: 42, nama: "someName", tag: ["ayam", "parrot", "hoverkraf"]},
acara: {_id: 42, nama: "someName", tag: ["ayam", "parrot", "hovercraft"]}
}

Dan bina indeks yang sepadan

Ty80

Sedikit nasihat: Jangan gunakan teknologi yang anda tidak boleh kuasai.

Gunakan mana-mana yang anda kenali dan mana-mana yang anda lebih mahir.

Jika anda belum menggunakan sama ada, anda boleh mempertimbangkan MongoDB.

左手右手慢动作

Untuk sistem Tag, saya rasa lebih senang menggunakan redis. Untuk masalah ini, anda hanya boleh menggunakan SET dalam redis.

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

Set Redis bagus untuk mewakili perhubungan Anda boleh membuat sistem penandaan dengan Redis menggunakan Set untuk mewakili setiap teg Kemudian anda boleh menambah semua ID semua objek yang mempunyai teg yang diberikan ke dalam Set yang mewakili teg khusus ini. menggunakan arahan SADD. Adakah anda mahu semua ID semua Objek mempunyai tiga teg berbeza pada masa yang sama. Hanya gunakan SINTER.

Jika anda menggunakan mongo untuk bahagian lain, anda juga boleh menggunakan redis untuk peningkatan dan penurunan teg kemas kini masa nyata individu dan untuk peningkatan dan penurunan acara dalam teg tertentu.

Jika anda ingin merekodkan bilangan kali setiap teg telah diterima pakai, cuma tambah HASH dengan teks teg sebagai kunci dan bilangan penerimaan sebagai nilai.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan