Elasticsearch怎么这么慢
优点:
1.高并发。实测es单机分配10g内存单实例,写入能力1200qps,60g内存、12核CPU起3个实例预计可达到6000qps。
2.同机房单条数据写入平均3ms(比mysql慢,mg不清楚)3.容错能力比mg强。比如1主多从,主片挂了从片会自动顶上4.满足大数据下实时读写需求,无需分库(不存在库的概念)。5.易扩展。实例间做下配置即可扩展并发性和容积,自动分配的写入机制,无需操心传统db中多主同步的诟病6.支持较复杂的条件查询,group by、排序都不是问题7.具有一定的关系性,但不用担心大字段的问题缺点:1.不支持事务2.读写有一定延时(不知道其他大牛是否遇到这个问题),我是写入一分钟后再做读操作3.无权限管理也是最近开始用,说下我的应用场景,用来存储线上日志做实时分析(类似淘宝鹰眼,但是完全实时),存储结构化的日志及原文,也调研过很多db,mg也有考虑过,相比之下实现和运维成本mg都要高不少我的场景如下:1.高并发,设计日志并发80wqps(实际存储会用一些策略缩小规模,约万级别)2.单条数据体积大,允许最大20k3.要求支持条件查询4.实时性高,目前从日志存储开始到出分析结果3分钟,包含前面提到的读写延时(求解决方案)目前就想到这么多,欢迎交流
redis集成规范
Redis是一个分布式(distributed)、容错(fault-tolerant)的 Redis 实现,集群可以使用的功能是普通单机 Redis 所能使用的功能的一个子集(subset)。redis的集成规范有:
1,冷热数据区分
虽然 Redis支持持久化,但将所有数据存储在 Redis 中,成本非常昂贵。建议将热数据 (如 QPS超过 5k) 的数据加载到 Redis 中。低频数据可存储在 Mysql、 ElasticSearch中。
2,业务数据分离
不要将不相关的数据业务都放到一个 Redis中。一方面避免业务相互影响,另一方面避免单实例膨胀,并能在故障时降低影响面,快速恢复。
3,消息大小限制
由于 Redis 是单线程服务,消息过大会阻塞并拖慢其他操作。保持消息内容在 1KB 以下是个好的习惯。严禁超过 50KB 的单条记录。消息过大还会引起网络带宽的高占用,持久化到磁盘时的 IO 问题。
4,连接数限制
连接的频繁创建和销毁,会浪费大量的系统资源,极限情况会造成宿主机当机。请确保使用了正确的 Redis 客户端连接池配置。
5,缓存 Key 设置失效时间
作为缓存使用的 Key,必须要设置失效时间。失效时间并不是越长越好,请根据业务性质进行设置。注意,失效时间的单位有的是秒,有的是毫秒,这个很多同学不注意容易搞错。
6,缓存不能有中间态
缓存应该仅作缓存用,去掉后业务逻辑不应发生改变,万不可切入到业务里。第一,缓存的高可用会影响业务;第二,产生深耦合会发生无法预料的效果;第三,会对维护行产生肤效果。