› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
codegear
V2EX  ›  MySQL

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

  •  
  •   codegear · Apr 16, 2015 · 3340 views
    This topic created in 4182 days ago, the information mentioned may be changed or developed.
    场景:
    现在有比较多的频段(可以理解为商品,20k+个),每个频段可以X路(X>100且固定)无干扰复用(可以理解为一个商品有100+种不同使用姿势,姿势间互不干扰,对于同一个姿势每个商品只能被选择一次)。每次分配就是指 给定姿势和商品数量,选出商品。

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

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

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

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

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


    谢谢!
    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1003 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 17:42 · PVG 01:42 · LAX 10:42 · JFK 13:42
    ♥ Do have faith in what you're doing.