1.OLTP和OLAP
分别是针对事务型查询和业务分析类的查询,前者比如个人去检查自己的交易记录,只会查几条,而且会查的字段比较多,后者是分析师使用的,比如检查某个字段的平均值、众数等聚合值,如果去扫描的话会扫描所有字段,对数据库写入、读取造成更大的影响。
2.OLAP
通常采用单独的数据仓库,专门针对业务分析,这里有一点像数据库主从多库做备份使用,主从库就是为了负载均衡,读取时从多个库读取,会有主备复制的问题。
3.列式存储
把数据按照字段而非按照整行存储在不同的节点,比如对于学生信息,一个数据库专门存储学生联系方式,一个数据库专门存储学生的学号信息,这里列式存储为什么能更好的加快分析类的请求,首先不同的数据库要维持对应的关系,比如对于第一行,都是同一个学生的信息,只有这样,列式存储才有意义。
列式存储可以采取一定的压缩方式。
4.数据存储
数据存储有模式的问题,因为随着代码的更新,存储模式也可能有不同的变化,比如字段的变化,这里有向前兼容和向后兼容的问题。
向后兼容是指新的代码能阅读旧代码写的数据;向前兼容是指旧的代码能阅读新代码的数据。
实现向前兼容和向后兼容的意义是,新旧业务更新时,为了防止直接更换全部数据和代码出现问题,在实际上线的时候是在一部分节点先测试的,在这个过程中会出现新旧数据并存、新旧代码并存的情况;哪怕不是服务端,针对客户端的更新,也会有一部分更新使用新客户端的用户和不会主动更新使用旧客户端的用户。
5.序列化和反序列化
序列化是指把内存中的数据结构比如栈、队列、自建数据类型、vector等存入存储系统,反序列化是把存储系统的内容变成内存能高效读取的数据结构。
json、xml、csv是针对解决存储的抛开编程语言的标准,针对json还有一些压缩手段,否则比如对于所有学生都有的studentid的字段,每个数据不仅要存储具体id还要存储student id这几个字符,会造成大量冗余,所以数据压缩能解决部分问题。