mysql sharding 读取_使用mysql处理非常大的数据

对不起,很长的帖子!

我有一个包含~30个表(InnoDB引擎)的数据库.这些表中只有两个,即“事务”和“移位”非常大(第一个有150万行,移位有23k行).现在一切正常,我没有当前数据库大小的问题.

但是,我们将拥有一个类似的数据库(相同的数据类型,设计,…),但更大,例如,“交易”表将有大约10亿条记录(每天约2,300万笔交易),我们正在思考如何我们应该在MySQL中处理这么大量的数据? (这是读写密集型).我阅读了很多相关帖子,看看Mysql(更具体地说是InnoDB引擎)是否可以与数十亿条记录表现良好,但我仍然有一些问题.我读过的一些相关帖子如下:

到目前为止我已经理解为提高非常大的表的性能:

>(对于innoDB表,这是我的情况)增加innodb_buffer_pool_size(例如,高达80%的RAM).

另外,我发现了一些其他MySQL性能调整设置here in

percona blog

>在表上有适当的索引(在查询中使用EXPLAN)

>分区表

> MySQL Sharding或群集

这是我的问题/困惑:

>关于分区,我怀疑是否应该使用它.一方面,许多人建议在桌子非常大时提高性能.另一方面,我阅读了许多帖子,说它不会提高查询性能,也不会使查询运行得更快(例如,here和here).另外,我在MySQL Reference Manual读到InnoDB外键和MySQL分区不兼容(我们有外键).

>关于索引,现在它们表现良好,但据我所知,对于非常大的表索引更具限制性(正如Kevin Bedell在他的回答here中提到的).此外,索引加速读取,同时减慢写入(插入/更新).那么,对于我们将拥有这个大型数据库的新类似项目,我们应该首先插入/加载所有数据然后创建索引吗? (加快插入速度)

>如果我们不能对我们的大表(“事务”表)使用分区,那么提高性能的另一种选择是什么? (除了MySQl变量设置,例如innodb_buffer_pool_size).我们应该使用Mysql集群吗? (我们也有很多连接)

编辑

这是名为“transaction”的最大表的show create table语句:

CREATE TABLE `transaction` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`terminal_transaction_id` int(11) NOT NULL,

`fuel_terminal_id` int(11) NOT NULL,

`fuel_terminal_serial` int(11) NOT NULL,

`xboard_id` int(11) NOT NULL,

`gas_station_id` int(11) NOT NULL,

`operator_id` text NOT NULL,

`shift_id` int(11) NOT NULL,

`xboard_total_counter` int(11) NOT NULL,

`fuel_type` int(11) NOT NULL,

`start_fuel_time` int(11) NOT NULL,

`end_fuel_time` int(11) DEFAULT NULL,

`preset_amount` int(11) NOT NULL,

`actual_amount` int(11) DEFAULT NULL,

`fuel_cost` int(11) DEFAULT NULL,

`payment_cost` int(11) DEFAULT NULL,

`purchase_type` int(11) NOT NULL,

`payment_ref_id` text,

`unit_fuel_price` int(11) NOT NULL,

`fuel_status_id` int(11) DEFAULT NULL,

`fuel_mode_id` int(11) NOT NULL,

`payment_result` int(11) NOT NULL,

`card_pan` text,

`state` int(11) DEFAULT NULL,

`totalizer` int(11) NOT NULL DEFAULT '0',

`shift_start_time` int(11) DEFAULT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `terminal_transaction_id` (`terminal_transaction_id`,`fuel_terminal_id`,`start_fuel_time`) USING BTREE,

KEY `start_fuel_time_idx` (`start_fuel_time`),

KEY `fuel_terminal_idx` (`fuel_terminal_id`),

KEY `xboard_idx` (`xboard_id`),

KEY `gas_station_id` (`gas_station_id`) USING BTREE,

KEY `purchase_type` (`purchase_type`) USING BTREE,

KEY `shift_start_time` (`shift_start_time`) USING BTREE,

KEY `fuel_type` (`fuel_type`) USING BTREE

) ENGINE=InnoDB AUTO_INCREMENT=1665335 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT

谢谢你的时间,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值