我是在一家物联网公司任职云开发,
公司主要生产智能家居中的智能摄像头和智能传感器和其他一些智能产品.
我们的业务核心的一部分功能就是这些智能设备,比如摄像头检测到移动时会向云端存储一条报警记录。用户可以在APP中查看这些报警记录,同时如果拥有此摄像头的用户把摄像头分享给了其他人,产生日志的时候,还会给分享用户的账号下产生一条报警记录。我们云端会为用户保留近半个月的报警记录,半个月后会删除这些报警记录。
我们之前实现这个业务是使用传统的mysql rds关系型数据库去存储记录这些日志,但后来随着设备量和用户的增长,存储的数据量越来越大,如果业务出现个性化需求,比如要求在APP中可以筛选某一类设备或者报警中加入了人形/人脸检测,要筛选出所有人形的报警的需求的时候,在这么大的数据量下,加字段肯定不现实,往往使用加表去实现。还有就是在删除数据的时候,如果贸然删,会影响主业务的查询效率变低,rds的压力提升。
我们一直想找寻一个其他的方式来改善我们这个主要的业务,使它变得更加多元化,能支持多条件的筛选和自动过期成为了我们主要的需求。
因为我们的日志系统一直使用的ES+kibana,我们经过调研发现ES支持我上面说的多条件筛选和过期,而且存储的费用经过计算也能相比RDS存储节省很大一部分。
所以我打算尝试把我们的这部分业务迁移到ES.
但我想在动手设计之出问问大家伙的意见,比如index我需要怎么建,我想这次设计出来一个类似消息中心的微服务,既支持设备的报警信息的写入又支持其他比如用户的行为记录,或者是系统的通知记录,所有日志类的东西,都能使用这个微服务来实现。
大家觉得我这个想法是否可行,如果可行,大家有没有一些建议提供给我,还请不吝赐教。
公司主要生产智能家居中的智能摄像头和智能传感器和其他一些智能产品.
我们的业务核心的一部分功能就是这些智能设备,比如摄像头检测到移动时会向云端存储一条报警记录。用户可以在APP中查看这些报警记录,同时如果拥有此摄像头的用户把摄像头分享给了其他人,产生日志的时候,还会给分享用户的账号下产生一条报警记录。我们云端会为用户保留近半个月的报警记录,半个月后会删除这些报警记录。
我们之前实现这个业务是使用传统的mysql rds关系型数据库去存储记录这些日志,但后来随着设备量和用户的增长,存储的数据量越来越大,如果业务出现个性化需求,比如要求在APP中可以筛选某一类设备或者报警中加入了人形/人脸检测,要筛选出所有人形的报警的需求的时候,在这么大的数据量下,加字段肯定不现实,往往使用加表去实现。还有就是在删除数据的时候,如果贸然删,会影响主业务的查询效率变低,rds的压力提升。
我们一直想找寻一个其他的方式来改善我们这个主要的业务,使它变得更加多元化,能支持多条件的筛选和自动过期成为了我们主要的需求。
因为我们的日志系统一直使用的ES+kibana,我们经过调研发现ES支持我上面说的多条件筛选和过期,而且存储的费用经过计算也能相比RDS存储节省很大一部分。
所以我打算尝试把我们的这部分业务迁移到ES.
但我想在动手设计之出问问大家伙的意见,比如index我需要怎么建,我想这次设计出来一个类似消息中心的微服务,既支持设备的报警信息的写入又支持其他比如用户的行为记录,或者是系统的通知记录,所有日志类的东西,都能使用这个微服务来实现。
大家觉得我这个想法是否可行,如果可行,大家有没有一些建议提供给我,还请不吝赐教。
2 个回复
JaydenRansom - 从事数据密集系统开发
赞同来自: YagamiRin 、codersun
1.关于“但后来随着设备量和用户的增长,存储的数据量越来越大,如果业务出现个性化需求,比如要求在APP中可以筛选某一类设备或者报警中加入了人形/人脸检测,要筛选出所有人形的报警的需求的时候,在这么大的数据量下,加字段肯定不现实,往往使用加表去实现”这部分诉求,ES可以通过在索引里面修改mapping添加字段做到,历史数据如果需要更新就肯定要update数据了,这个是无法避免的;
2.关于“还有就是在删除数据的时候,如果贸然删,会影响主业务的查询效率变低,rds的压力提升”这部分,由于您提出的场景是监控数据场景,可以设置索引周期创建(比如一天一个索引、一个月一个索引),这样删除数据的时候可以直接删除整个索引,es对于删除整个索引的操作,不会带来特别大的查询影响,同时可以把删除操作定期在业务低峰时刻进行;
3.关于“我想这次设计出来一个类似消息中心的微服务,既支持设备的报警信息的写入又支持其他比如用户的行为记录,或者是系统的通知记录,所有日志类的东西,都能使用这个微服务来实现”的诉求,可以通过构建一个小的元数据管理机制来实现,在数据库中维护一个业务和ES信息对应的表,提供接口供写入和查询服务来进行ES集群的路由。
综上,个人觉得这个想法是可行的。
yongde - 90后IT男
赞同来自:
2、针对数据量大的索引,可按日或按月建索引,防止数据量过大,导致查询速度慢