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

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

阿神
阿神

闭关修行中......

répondre à tous(6)
洪涛

Si la quantité de données est importante et que cela demande beaucoup d'efforts, vous pouvez envisager de combiner MySQL et Sorl.

La quantité de données n'est pas importante, vous pouvez donc envisager d'utiliser les balises comme catégorie et les enregistrer dans MySQL.

MySQL n'est pas aussi lent qu'on le pense.

黄舟

mongodb. Aucune raison, j'aime juste ça.

大家讲道理

MongoDB est évidemment bien, mais utiliser une base de données relationnelle pour ce faire est un désastre

左手右手慢动作

Il est préférable que la conception du modèle MongoDB ne soit pas conçue comme ça, elle devrait ressembler à ce qui suit

table de réunion :
{_id : 42, nom : "someName", tags : ["poulet", "perroquet", "aéroglisseur"]}

table des personnes :
{_id : "somebody@gmail.com", nom : "LiMing", téléphone : "1381671537"}

tableau d'activité des personnes :
{_id:56, personne :
{_id : 42, nom : "someName", tags : ["poulet", "perroquet", "aéroglisseur"]},
événement : {_id : 42, nom : "someName", tags : ["poulet", "perroquet", "aéroglisseur"]}
>

Et construire l'index correspondant

Ty80

Juste un petit conseil : N'utilisez pas une technologie que vous ne pouvez pas maîtriser.

Utilisez celui qui vous est familier et celui que vous maîtrisez le mieux.

Si vous n'avez utilisé ni l'un ni l'autre, vous pouvez envisager MongoDB.

左手右手慢动作

Pour le système Tag, je pense qu'il serait plus pratique d'utiliser Redis. Pour ce problème, vous pouvez simplement utiliser SET dans Redis.

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

Les ensembles Redis sont bons pour représenter les relations. Vous pouvez créer un système de balisage avec Redis en utilisant un ensemble pour représenter chaque balise. Ensuite, vous pouvez ajouter tous les identifiants de tous les objets ayant une balise donnée dans un ensemble représentant cette balise particulière, en utilisant la commande SADD. Voulez-vous que tous les identifiants de tous les objets aient trois balises différentes en même temps ? Utilisez simplement SINTER.

Si vous utilisez mongo pour d'autres parties, vous pouvez également utiliser redis pour les augmentations et diminutions de balises individuelles mises à jour en temps réel et pour les augmentations et diminutions d'événements dans une certaine balise.

Si vous souhaitez enregistrer le nombre de fois où chaque balise a été adoptée, ajoutez simplement un HASH avec le texte de la balise comme clé et le nombre d'adoptions comme valeur.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal