搜索为主的数据库如何选型与构造表结构
假设现在有一个数据结构如下的数据源
[
{
id: 1,
name: '小明',
price: 300,
data: [
{
id: 10003,
name: '屠龙宝刀',
num: 100
},
{
id: 10004,
name: '无尽之刃',
num: 100
}
{
......
}
]
},
{
id: 2,
name: '小红',
price: 300,
data: [
{
id: 10003,
name: '屠龙宝刀',
star: 5,
num: 100
},
{
id: 10004,
name: '无尽之刃',
star: 3,
num: 100
}
{
......
}
]
}
{
..........
}
]
如以上结构,假设有200万条游戏账号数据,怎样设计数据库和表才能使搜索速度尽可能快,要求能搜索出拥有 m 个“屠龙宝刀” 和 n 个“无尽之刃”的账号。
我现在想了几种方案
- 关系表
account(账号)表,一个data(装备)表,一个rel(关系)表,但是关系表的条数是 账号数 * 每个账号的物品数, 至少是三四千万。
- 全文搜索
一个account(账号)表,一个data(装备)表,账号表里,用一个字段存物品的字符串,采用全文搜索 - mongodb 没接触过,但是听说可以直接存json,而且便于检索
各位大佬有没有更好的方法,先在此谢过,采纳的可以私信发个红包
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
用MongoDB的话,你题目中的数据结构就可以很好地表达你需要的数据。
这个搜索可以用:
为了查询更快,需要索引:
用MySQL就足够了,道具持有表
user_item
只需要3列:以
要求能搜索出拥有 m 个“屠龙宝刀” 和 n 个“无尽之刃”的账号
为例:SELECT uid FROM user_item WHERE iid = i_屠龙宝刀 AND icount >= m
SELECT uid FROM user_item WHERE iid = i_无尽之刃 AND icount >= n
两个uid列表用程序取交集就可以了。当然,也可以直接在MySQL中做
INTERSECT
操作(不太推荐)。只存3个INTEGER的话,三四千万对MySQL毫无压力。
再多些的话,可以考虑按uid或iid水平分库。
虽然赞了楼上的mongodb的示例,但是,我平时都是用elastic search专门做搜索的