mysql 如何把一张表拆分成多表

2014-08-08 17:15:37 +08:00
 letitbesqzr
情况是这样,一张表大概有2e的数据,使用solr建索引总会出现莫名其妙的错误,比如内存不足之类的...

想把那表分成以下这样,每张表分别存储1kw的数据(id不变).
xxx_1
xxx_2
xxx_3
xxx_4
xxx_....

请问有什么工具能做到,如果插入新数据,该如何做到id不变的情况下自动分?
5894 次点击
所在节点    MySQL
17 条回复
plprapper
2014-08-08 17:50:02 +08:00
ID不变 是啥意思?
dong3580
2014-08-08 17:56:51 +08:00
每个表加个id嘛,自动增长,发现id大于1KW,try {create table},然后id发现大于2kw就再次try{create table}。

查询的时候,如果id在2KW-3KW之间,就在xxx_3中查找,所以,你可以封装个简单的逻辑方法来处理。
我去年改一个网站就发现它是这么玩的。

再看了看,你要求每个表id不变么?其实还是差不多,第一个表id 0-1kw,第二个表还是id 0-1kw,例如查询a(2kw-3kw)的话就在, (Int)(a/1KW)取整拼接上xxx_就是表名了,不过可能没第一种方便罢了。

另外,不建议这么做,感觉好混乱的样子。
wodemyworld
2014-08-08 18:06:00 +08:00
内存不足,你多分几个表有用么
wodemyworld
2014-08-08 18:06:40 +08:00
顶多是查询速度快点罢了,而且这样分表和纵向分区有啥区别呢
letitbesqzr
2014-08-08 18:28:14 +08:00
@wodemyworld 建立索引的时候,单表太大了 会出现内存不足
Mac
2014-08-08 19:16:14 +08:00
加内存
letitbesqzr
2014-08-08 19:48:48 +08:00
@Mac 32G了...
letitbesqzr
2014-08-08 19:51:18 +08:00
@Mac
@wodemyworld
@dong3580
@plprapper

其实就是想做一个,,所谓的"密码查询"的东西... 没怎么接触过大数据,之前一时糊涂,所有数据都导到一张表.. 建立索引的时候各种问题.. 现在把每个网站的"密码" 都单独分一张表,然后再建立索引,这样就正常查询了 速度也很快.. 用的solr 8E数据大概0.2秒
x10ng
2014-08-08 22:53:25 +08:00
写个脚本就可以做到啊,你要对什么字段建索引? 另外,可以试试mongodb
bojieyang
2014-08-08 23:57:27 +08:00
这个就是水平分表嘛,可以参考TDDL。
eslizn
2014-08-09 00:57:23 +08:00
其实分表的关键在于怎么路由表
letitbesqzr
2014-08-09 01:10:50 +08:00
@eslizn 这个倒是无所谓,用solr 建立好索引后,直接是全部表查询.
letitbesqzr
2014-08-09 01:11:24 +08:00
@bojieyang 3Q 但是表已经建立好了
ETiV
2014-08-09 03:32:04 +08:00
insert into table_1[2,3,4,5,6,7,8,9](columns, ...) select columns,... from source_table where id % 10 = 1[2,3,4,5,6,7,8,9];

酱紫?
Vonex
2014-08-09 04:31:11 +08:00
社工库?
letitbesqzr
2014-08-09 07:57:56 +08:00
@Vonex 是的 ..
frankzeng
2014-08-09 10:07:38 +08:00
别分表,用分区嘛

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

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

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

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

© 2021 V2EX