请教一个分配问题的数据库结构

2015-04-16 12:17:50 +08:00
 codegear
场景:
现在有比较多的频段(可以理解为商品,20k+个),每个频段可以X路(X>100且固定)无干扰复用(可以理解为一个商品有100+种不同使用姿势,姿势间互不干扰,对于同一个姿势每个商品只能被选择一次)。每次分配就是指 给定姿势和商品数量,选出商品。

请问如何设计表结构可以使得分配时的数据库查询开销最小?数据库是MySQL,机器是个低性能512M小VPS,每分钟至少一次分配,频段可增加。

目前我有两张表:商品表和分配表,其中分配表的每一项标定了哪一样商品的哪个姿势被分配给了谁。
当下正在使用的方案是:每次分配首先锁分配表,接着JOIN分配表和商品表,找出指定数量的商品,保证这些商品没有被以这个姿势使用过,添加商品到分配表中,最后解锁表。但是现在每次分配时间可能多达30秒(要求分配2k个,分配表仅有8w条数据)。

所以现在yy的另一个方案是:不再JOIN两张表,为每件商品安排一个虚拟姿势,并且在添加商品之后立刻分配。由此,每次有分配请求出现的时候,JOIN分配表自身,做查询。

请问第二种方案是否可行?第一种方案是否有大幅度优化的地方?是否有远胜于这两种的其他方案?

(暂时还没有查看前一种方案的瓶颈究竟在两表查询还是在INSERT上)


谢谢!
2460 次点击
所在节点    MySQL
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/184102

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX