go语言入门实践+认识数据库存储|青训营笔记

132 阅读5分钟
  • GO入门实践

  • 1.依赖管理演进

    • gopath,GO语言支持的一个环境变量
  • 2.测试

    • 单元测试:首先是输入,测试单元,输出,以及校对,单元的概令比广,包括接口,函数,模块等;用最后的校对来保代码的功能与我们的预期相符,单侧一方面可以保证质量,在整体覆盖率足够的情况下,一定程度上既保证了新功能本身的正确性,又未破坏原有代码的正确性,另一方面可以提升效率,在代码有bug的情况下,通过编写单测,可以在一个较短周期内定位和修复问题
    • mock测试:
    • 基准测试:
  • 项目实践:

    • 1.需求实践
      • 需求背景:首先进行一个需求描述:展示话题和回帖列表

      • 绘制E-R图:实体关系图,是一种提供了实体,属性和联系的方法,用来描述现实世界的概念模型。通俗点讲就是,当我们理解了实际问题的需求之后,需要用一种方法来表示这种需求,概念模型就是用来描述这种需求。例:学生饭卡ER图。

      • 分层结构:数据层、逻辑层、视图层(view)

    • 2.代码设计(这里就不附录啦)
    • 3.测试运行
  • 数据库:

    • 1.经典案例

      • 数据的流动、产生、持久化,以及一些亟待解决的问题
    • 2.存储&数据库简介

      • 存储系统 中的RAID技术(组合磁盘系统)

        • 出现背景:
          • 单块磁盘的写入性能<多块磁盘的并发写入性能单块磁盘的容错能力有限,不够安全
          • 单块大容量磁盘的价格>多块小容量磁盘
        • RAID0(磁盘冗余阵列):这是一个比较基础的,她的特点有:多块磁盘的简单组合、数据条带化存储,提高磁盘带宽、容错率低
        • RAID1:一块磁盘对应一块镜像磁盘(读+写),空间利用率为50%,容错率较高,实际可用容量为硬盘总容量的一半
        • RAID0+1:结合RAID0和RAID1,真实利用率为50%,容错率较高且写入带宽好,是两者优点的结合。目前RAID10成为大多数企业的主流。
        • 做RAID的原因:1.增加性能,提升磁盘的利用率和读写速度。2.服务于可靠性机制
      • 数据库:有关系型数据库和非关系型数据库

        • 关系型数据库:结构化数据+支持事务ACID+SQL(支持复杂的查询语言)
        • 非关系型数据库:半结构化数据+可能ACID+可能支持SQL
        • 数据库与经典存储比较:

          • 1.结构化的数据管理

          • 2.事务能力:ACID:隔离多个并发事务,数据保持持久

          • 3.复杂的查询能力

        • 数据库使用方式:SQL:

    • 3.主流产品剖析

      • 3.1单机存储(鲜少涉及网络交互)

      • 本地文件系统+key-value存储,Linux:一切皆文件

      • 3.2分布式存储(在单机存储基础上实现了分布式协议,涉及大量的网络交互)

        • HDFS(分布式文件系统=大数据时代的基石):HDFS是Hadoop生态下的分布式文件系统,基于Linux本地文件系统上的文件系统。
          • 组件:Block(块)、NameNode(名称节点)、DataNode(数据节点)和Client(客户机)。
          • 特点:支持海量数据存储+高容错性+性价比高(HDFS可以应用在普通PC机上,这种机制能够让给一些公司用几十台廉价的计算机就可以撑起一个大数据集群)
        • ceph:和HDFS不同的是,HDFS是中心化的分布式存储,Ceph是去中心化。
      • 3.3单机关系型数据库(Oracle、MySQL)

      • 3.4单机非关系型数据库

        • 关系型与非关系型数据库的区别:
          • 成本:Nosql数据库易部署,不用像Oracle那般花费较高成本选购。
          • 查询速率:Nosql数据库将数据储存于缓存当中,不用历经SQL层的分析;关系型数据库将数据储存在电脑硬盘中,查询速率远不如Nosql数据库。
          • 储存格式:Nosql的储存文件格式是key,value方式、文本文档方式、照片方式这些,能储存的对象种类灵活;关系数据库则只适用基础类型。
          • 可扩展性:关系型数据库有join那样的多表查询机制限定造成拓展性较差。Nosql依据键值对,数据中间沒有耦合度,因此容易水平拓展。
          • 数据一致性:非关系型数据库注重最终一致性;关系型数据库注重数据整个生命周期的强一致性。
          • 事务处理:SQL数据库支持事务原子性粒度控制,且方便进行事务回滚;NoSQL也支持事务处理,但可靠性不足,其价值在于可扩展性和大数据量处理。
      • 3.5分布式数据库:单机数据库演变-分布式数据库

        • 分布式数据库可以解决容量问题:单机数据库易受硬件限制,而分布式数据库可以动态扩缩容

        • 解决弹性问题:这一点我认为和上述无太大差别,即CPU资源紧张情况下,分布式数据库可以扩容,同样也可以缩容。

        • 提高性价比

    • 4.新技术演进

      • 软件架构的变更,AI增强storage,新硬件革命

      • SPDK:是一个框架,可以优化存储性能。其基石有:用户态(user space)、轮询(polled-mode)、异步(asynchronous)、无锁(lockless)的NVMe驱动,其提供了零拷贝、高并发直接从用户态访问ssd的特性。

    • 心得体会:

      • 学到分布式存储的时候,出现了很多专有名词,对于电子信息工程专业出身的我来说,短时间掌握有点困难,然后我把每一个专有名词挑出来查询,探究她的前世今生,其中就有Hadoop:如图所示!

image.png