单机会出现的问题
1.单点故障
2.多用户访问时会造成数据库宕机
数据的分类
1.结构化数据
有规则的数据,可以使用传统的数据库表即RDBMS(关系型数据库)进行存储,例如mysql,sqlServer,Oracle
mysql:①主从复制 数据备份 高可用
②读写分离 高性能 主:写 从:读
③当mysql的数据量达到2000w条时,数据库的性能会下降,所以可以采用分库分表实现海量数据存储
分表:水平拆分 将一张大表数据水平拆分小表
如何进行分表?答:可以写一个分表算法,例如可以将主键%小表数量,根据余数决定怎么分表
mycat:分库分表的数据库中间件,阿里项目
2.半结构化数据
有一定规则,但是可能会有一定变化的数据,例如json,xml。可以用nosql产品进行存储。(注:nosql:no only sql,不仅仅是sql)nosql就是用来存储海量数据,例如日志,物流
①用myredis(内存型数据库)存储,以key——value形式存储,value可以是String,Set,ZSet,Hash,List类型
②用mongodb(文档型数据库)存储
③用Hbase存储,列存储的产品
④Neo4j,图形存储的产品
以上存储方法的优点:
①高可扩展性,当数据量达到一个峰值之后,可以通过水平扩展的方式,去增大它的存储容量
②分布式计算,支持集群环境,可以使用廉价的服务器构建集群,因此有了第三点优点
③低成本
④数据结构灵活,没有限制(相比于关系型数据库)
⑤没有复杂的关系
以上存储方法的缺点
①弱事务
②查询语言不统一,功能有限
③数据安全较差
如何去选择?规则:
①事务要求高 数据完整性要求很严格 特别重要的数据 用关系型数据库
②一般的数据或者后期可能会扩展的数据 用nosql产品
③不重要的数据(缓存) redis memcached
④二进制数据 fastdfs
3.非结构化数据
主要是指二进制数据,例如一些文件:xlsx文件,jpg,wmv
①在服务器中建立一个文件夹存放文件,但会影响服务器性能;而且磁盘损坏,就会可能造成数据丢失问题;
如果tomcat构建集群,就会造成文件无法访问。
②mysql数据库,blog数据类型(专门存储二进制数据),会影响数据库性能,并且大规模的文件会造成数据繁多。
③fastdfs分布式文件系统
优点:有基础的上传下载功能,负载均衡,冗余备份,文件去重特性