作者回复: InfluxDB和OpenTSDB都是时间序列数据库,当然可以做到。OpenTSDB是基于HBase的,HBase原理和Cassandra相似,都是基于列的数据库,都适合存时间序列数据。
作者回复: 你好,视频中的mysql表设计只演示了聚合数据,一般原始数据可以考虑单独存ES或者Cassandra/HBase等NoSQL数据库。 space_info存放空间相关数据,比方说空间名称,我的视频,我的文章等,可以参考波波在B站上的空间:https://space.bilibili.com/518029478
作者回复: TimescaleDB是在PostgreSQL基础上,针对时间序列场景的扩展,完全可以实现分布式计数服务。
作者回复: 读写分离以后,系统就引入了分区,根据CAP原理,在P分区的情况下,CA不可兼得,需要做出牺牲,如果要可用性A,那么一致性C就需要牺牲,如果要强一致性C,那么可用性A就需要牺牲。 后面第四章会讲分布式事务和一致性问题,请耐心等待第四章。
作者回复: 你好,像mysql主从+读写分离,是目前互联网企业普遍做法,我之前工作过的公司像携程/拍拍贷等,大量应用mysql主从+读写分离。分表分库和缓存可以部分解决性能问题(课程第三/第五章有案例),但不能解决所有性能问题,有的时候还是需做DB层的主从+读写分离。课程第四章会讲到CQRS技术, CQRS可以认为是服务层的一种读写分离,在大规模微服务架构中有很多应用场景,第四章我会进一步介绍。 像mysql MHA之类的技术,是可以做到主从高可用的,一主二从,主如果挂了,其中一个从可以自动升级成主,具体细节可以查网上资料很多。
作者回复: 对,第二个表中的timestamp表示每分钟的聚合数据。 如果要查询总的观看数,后面在后台还要进一步聚合每小时/天/月/年的数据,这样可以加速查询。
作者回复: 当然,数据模型设计一定要考虑读写模式。
作者回复: 现代消息系统比如Kafka,只要写入了可以保证不丢消息。但是生产者客户端因为网络等因素,可能会重发,造成消息重复,所以消费端要做去重或者幂等处理。
作者回复: 可以用hbase,还有基于hbase的opentsdb也可以。课程只是演示用cassandra,也是可以的。具体看公司的现有技术栈和运维能力等。
作者回复: 分库分表中间件,其实原理大多类似。shardingsphere java开发的,开源时间也比较久,社区生态也比较好(Apache背书),文档也不错,国内企业落地案例多,生产应用推荐。cetus是c开发,号称性能第一,开源时间不长,可以关注。