抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

前因

场景1:线上的数据异步同步使用的是rabbitmq,当对数据库数据进行增删改时候会发送一条mq消息到同步服务,同时进行查库写入es。

1.使用docker安装redis

下载redis镜像 docker pull redis 然后直接直接

docker run -d -p 31522:6379 -v /data/redis-data:/data --name redis redis redis-server --appendonly yes --requirepass 'yourpassword'

参数解释:

-p 31522:6379 修改redis对外暴露端口号

-v /data/redis-data:/data 将redis数据保存在宿主机上

--appendonly yes 开启数据持久化

--requirepass 'yourpassword' 设置redis访问密码

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行

举例如下:
表A记录如下:

我们先来了解什么是主从同步,主从同步,顾名思义也称为主从复制,用来建立一个和主数据库完全一样的数据库环境。主从同步使得数据可以从一个数据库服务器复制到其他服务器上,实现主数据库的数据和从数据库的数据保持一致。

集群是共享存储的,是data-sharing . 主从复制中没有任何共享 . 每台机器都是独立且完整的系统,是nothing-sharing.

1、 为查询缓存优化查询

像 NOW() 和 RAND() 或是其它的诸如此类的SQL函数都不会开启查询缓存,谨慎使用

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0

晚上闲来无事,想找点事做

于是手动删除了一些无用的数据库,手贱的是在从库里面删除了

1、Elasticsearch的功能

(1)分布式的搜索引擎和数据分析引擎

金额字段类型选择

1.decimal

decimal(M,N) 0<M<65,0<N<30,且N<M,M和N的长度直接影响存储空间

默认情况,表示金额的情况,decimal(16,2),范围是99,999,999,999,999.99 to -99,999,999,999,999.99

占用空间为8个字节

存储时会四舍五入

2.bigint

占用空间为8个字节

存储相同大写的数字是,decimal比bigint多1个字节

存入数据库时,decimal会做四舍五入

create table ta (a decimal(4,2),b int);

insert into ta (a,b) values(99.006,9900);

select * from ta;

1
2
3
4
5
6
7
8
9
10
+-------+------+

| a | b |

+-------+------+

| 99.01 | 9900 |

+-------+------+

总结:

1.decimal&bigtin在做计算时,都不会丢失精度(float&double在极端情况下会丢失精度),但是在存入mysql数据库时,decimal会做四舍五入,而int不存在这种情况。

2.金额字段使用decimal类型时,默认单位为元,比较直观,没有歧义

3.金额字段使用bigint时,需要特殊说明单位为分,程序处理时,可以直接使用整数类型long,较通用

4.存储相关大小的金额时(bigint以分为单位),decimal占用空间比bigint微大

综上所诉:建议用bigint来存储金额