zoukankan      html  css  js  c++  java
  • 数据系统和分布式(一)数据系统基础

    数据 和 分布式

    数据系统基础

    第一章. 可靠 可拓展 可维护的应用系统

    • 可靠性

      • 出现意外情况, 硬软件故障,人为失误, 系统应该正常运转, 虽然性能降低, 但是功能正确
    • 可拓展性

      • 随着系统规模的增长 , 系统应该合理的匹配增长

      • 比如Twitter的例子P19

        • 描述性能我们关心中位数, 百分位数
        • 比如P50代表至少一半用户查询等待时间是在这个时间之内的
        • 同样的还有99.99%这种
        • 实际上为了提高性能, 我们常常在垂直拓展和水平拓展之间做取舍
    • 可维护性

      • 许多时间的推移, 新加入的运维人员应该比较容易适应
      • 可运维性: 运维更轻松
      • 简单性: 简化系统复杂度
      • 可演化性: 易于改变
    • 常见术语

      • 现在的应用很多都有数据系统的很多模块
      • 数据库: 用来存储数据
      • 高速缓存: 缓存那些复杂或操作代价昂贵的 结果 加快下一次访问
      • 索引: 按关键字来检索数据 并支持各种过滤
      • 流式处理: 持续发送数据到另外一个进程 , 采用异步方式
      • 批处理: 定期处理大量的累计数据

    第二章 数据模型 和 查询语言

    • 计算机常常的分层结构, 在数据系统中也不例外. 在某个具体的层次上 , 我们关注的问题是 如何用下一层来表示当前层

      • 用数据结构对现实建模 -> 用json或者xml或者关系数据库的表进行存储-> 用内存, 磁盘或者网络的字节格式来表示 ->硬件用电流, 磁场来表示数据
    • 关系模型和文档模型

      • 关系模型最出名的就是SQL
      • 子主题 2

    第三章 数据存储 和 检索

    • 从基本的层面: DB = 插入时存储数据, 查询时返回数据

    • 哈希索引

    • B树索引

    • 事务分析和处理

      • 事务不一定有ACID属性

      • OLTP

        • 在线事务处理
        • OnLine Transition Process
        • 使用索引的某些键查找少量积累, 根据用户的输入 插入或更新记录 并且常常是交互式的
        • 比如博客的评论 ,游戏的动作
        • 基本访问模式和处理业务交易类似
      • OLAP

        • 在线分析处理
        • OnLine Analytic Process
        • 分析查询需要扫描大量的记录 ,并汇总一个信息
        • 比如 一个月店铺总收入 促销期间比平时多麦了多少香蕉
      • 数据规模 OLTP GB~TB OLAP TB到PB

      • 命名 常常OLAP单独在数据仓库上 因为不愿意让业务分析人员在OLTP上执行代价很高的操作 数据仓库有OLTP的只读副本

      • 采用数据仓库的目的是可以针对不同的分析访问模式进行优化

    • 子主题 5

      • 子主题 1

    第四章 数据编码和 演化

    • 在内存里 ,数据保存在对象, 结构体, 数组, 哈希表 ,树. 把数据写入文件或者通过网络发送时, 由于指针对其他进程没有意义,所以字节序列和内存的大不一样

    • Json

    • XML

    • 二进制

      • Thrift

        • Facebook开发的 07 - 08开源

          • 有两种编码方式

            • Binary Protocol

              • 对一个3字段的59byte
            • CompactProtocol

              • 只要34字节
      • Protocol Buffers

        • Google开发的 07 - 08开源

          • 类似CompactProtocol

            • 只要33Byte
      • 特征是 编码时不存储具体的字段名, 比如name, 而是用一个Tag来标识字段, 带来了更好的模式演化, 为以后拓展字段等

        • 旧代码读新代码写入的数据

          • 可以通过简单的忽略解决
          • 实现了向前兼容性
        • 新代码读入旧代码的数据

          • 字段必须为optional或者具有默认值
          • 实现了向后兼容性
      • 而且required 和 optional是在运行时检查, 在编码时不编码进去

      • Avro

        • 与前两个比, 优点在于没有标签号
    • 数据流模式

      • 基于数据库的流模式

      • 基于服务的数据流

        • REST

        • RPC 远程过程调用 Remote Procedure Call

          • RPC存在一些问题

            • 本地函数可预测(只和参数有关), 网络请求是不可预测的, 网络问题很常见 ,请求或者响应可能因为网络丢失, 那是不是要有重试机制? 幂等性怎么解决
            • 本地要么return一个结果 要么抛出异常 要么死循环. 远程可能因为超时没有结果. 根本不知道发生了什么
            • 如果重试失败的请求, 可能请求已经完成, 只是响应丢失, 可能会导致执行多次, 除非建立( 重复数据)消除(幂等性)机制
            • 由于网络延迟, 函数执行时间很难说
            • 本地可以把引用或者指针传给本地内存的对象 RPC一定要编码成网络字节序列
            • 子主题 6
          • 子主题 2

        • 面向微服务的一个关键的设计目标是, 通过使服务可独立部署和演化, 让应用程序易于更改和维护

      • 基于消息传递的数据流

        • 也就是消息队列

          • Rabbit MQ,Active MQ, Apache Kafka
        • 优点:

          • 1.如果接受方过载, 或者不可用 .它可以作为缓冲区, 提高系统可靠性
          • 2.自动把消息重新发到崩溃的进程 , 防止消息丢失
            1. 解耦
          • 4.避免了发送方需要知道接收方的IP地址, 端口号( 在频繁变更的虚拟机中)很有用
          • 5.支持一条消息多个接收方
          • 6.逻辑上的分离, 发送方只管发送消息,不关心谁使用它们
          • 7.异步的
      • 分布式Actor框架

    分布式数据系统

    子主题 1

    子主题 2

    子主题 3

    派生数据

    XMind: ZEN - Trial Version

  • 相关阅读:
    Java的五个基础面试题 容易搞倒老手的
    新北邦java笔试题
    Mysql面试题及答案
    MySQL取得当前时间的函数是什么 格式化日期的函数是什么
    mysql索引优化面试题
    介绍一下mysql的日期和时间函数
    MYSQL面试题:简单叙述一下MYSQL的优化
    不少程序员都会碰到的三个面试题
    HTTP URLEncoding
    Comparable vs. Comparator in Java
  • 原文地址:https://www.cnblogs.com/yahoo17/p/13760453.html
Copyright © 2011-2022 走看看