同时有500个人在线,都在同一时间段要操作MYSQL的临时表。
这里有个疑问,这个临时表要建议500个还是只建立一个?如果建立1个,同时操作时其它人的数据会不会丢失。
这是我的临时表结构,保存在内存中。
CREATE TEMPORARY TABLE tmp_tradelist_$id
(tid
bigint(20) unsigned NOT NULL DEFAULT '0',status
varchar(40) NOT NULL,
PRIMARY KEY (tid
)
) ENGINE=MEMORY DEFAULT CHARSET=utf8";
如果使用中间表,每次使用完还要删除数据吗?效率有没有临时表高
[quote]同时有500个人在线,这个临时表要建议500个还是只建立一个? [/quote]
如果你是使用[code="sql"]CREATE TEMPORARY TABLE...[/code]的话,是每个连接=connection会被自动建立1个临时表。
如果你没有使用连接池,500个人启动500个连接的话,就会有500个临时表被建立。
每个临时表生活在自己的connection/session中,不同连接间看不到对方的临时表。
临时表会在连接断开时自动被Drop掉。
[quote]同一时间有多个人操作时,临时表里的数据会不会丢失。[/quote]
不是每个人的单位,是每个连接的单位。
即每次打开连接,你都只能重新建立个临时表,使用完扔在那里,断开连接后,系统自动删掉它。
[quote]还是要建立一个普通表。来当成中间表使用。使用完后清空数据呢?[/quote]
[size=large][b]我个人推荐这种方式。[/b][/size]
因为临时表比较是连接单位的,现在全都是connection pool,搞不好数据会串(依赖驱动)。另外每次create,drop(自动)还是有开销的。
用中间表的话,一次建好,终身有效,哈。
1.调试方便。
2.需要自己定时清理。
3.最后单独个数据文件加分区,毕竟碎片会很严重。
4.设计上要区分每个用户。可以根据业务走,虽然麻烦些,但是灵活。
5.互相间看得见。也好也不好。看需求。
这个临时表是要干什么用?保存用户登录状态么?做登录唯一性校验?如果做唯一性校验有spring security,如果不是,用session保存不可以吗?这么多人频繁操作这张表,即便数据占用内存不大,数据库连接也是一个非常昂贵的资源,要尽量避免此类操作,如果做session同步,可以采用cookie或者memcache。