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

我想做一个活动系统,每个活动都有很多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을 결합하는 것을 고려해 볼 수 있습니다.

데이터의 양이 많지 않기 때문에 태그를 카테고리로 활용하여 MySQL에 저장하는 것도 고려해 볼 수 있습니다.

MySQL은 생각만큼 느리지 않습니다.

黄舟

mongodb. 이유는 없습니다. 그냥 마음에 듭니다.

大家讲道理

MongoDB는 확실히 좋지만 이를 위해 관계형 데이터베이스를 사용하는 것은 재앙입니다

左手右手慢动作

MongoDB 모델 디자인은 그렇게 디자인하지 않는 것이 가장 좋습니다. 다음과 같아야 합니다

회의 테이블:
{_id: 42, 이름: "someName", 태그: ["chicken", "parrot", "hovercraft"]}

개인 테이블:
{_id: "somebody@gmail.com", 이름:"LiMing", 전화번호:"1381671537"}

개인 활동 테이블:
{_id:56, 사람:
{_id: 42, 이름: "someName", 태그: ["chicken", "parrot", "hovercraft"]},
이벤트: {_id: 42, 이름: "someName", 태그: ["chicken", "parrot", "hovercraft"]}
}

그리고 해당 인덱스를 구축합니다

Ty80

약간의 조언: 숙달할 수 없는 기술은 사용하지 마세요.

자신에게 익숙한 것과 더 능숙한 것을 사용하세요.

둘 중 하나도 사용하지 않았다면 MongoDB를 고려해 볼 수 있습니다.

左手右手慢动作

Tag 시스템의 경우 redis를 사용하는 것이 더 편리할 것 같습니다. 이 문제의 경우 redis에서 SET을 사용할 수 있습니다.

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

Redis 세트는 관계를 나타내는 데 적합합니다. 세트를 사용하여 모든 태그를 나타내는 태그 지정 시스템을 만든 다음 특정 태그를 나타내는 세트에 특정 태그가 있는 모든 객체의 ID를 추가할 수 있습니다. SADD 명령을 사용하여 세 가지 다른 태그를 가진 모든 개체의 ID를 동시에 원하십니까?

다른 부분에 mongo를 사용한다면 개별 실시간 업데이트 태그 증감과 특정 태그의 이벤트 증감에도 redis를 사용할 수 있습니다.

각 태그가 채택된 ​​횟수를 기록하려면 태그 텍스트를 키로, 채택 횟수를 값으로 사용하여 HASH를 추가하면 됩니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿