加入收藏 | 设为首页 | 会员中心 | 我要投稿 南昌站长网 (https://www.0791zz.cn/)- 终端安全、安全管理、数据治理、图像分析、大数据!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

走自主研发道路

发布时间:2021-02-15 15:08:51 所属栏目:传媒 来源:互联网
导读:什么是对象存储? 对象存储是一种使企业能够管理离散单元或对象中存储的方法。使用这种存储类型时,数据对象将保留在没有嵌套或分层文件结构的单个存储库中。 存储中的每个对象都包含构成文件的所有数据块以及任何关联的元数据。然后,将这些数据放入一个存储

什么是对象存储?

对象存储是一种使企业能够管理离散单元或对象中存储的方法。使用这种存储类型时,数据对象将保留在没有嵌套或分层文件结构的单个存储库中。

存储中的每个对象都包含构成文件的所有数据块以及任何关联的元数据。然后,将这些数据放入一个存储池(一个平面地址空间)中。当企业需要检索数据时,可以通过分配给该对象的唯一标识符来查找数据。

对象存储之所以有用,部分原因在于附加到文件的元数据。该元数据可以自动生成,也可以由企业定义,从而可以进行多种分析。另一个好处是能够灵活存储数据而无需考虑层次结构。这赋予了使用存储资源最大容量的更大能力,并且更易于扩展。

尽管有这些好处,对象存储确实具有比文件或块存储系统慢的缺点。对于要求低延迟的应用程序或工作负载,这是一个糟糕的选择。

什么是文件存储?

文件存储是一种在分层系统中存储数据的方法。文件存储是大多数用户熟悉的标准存储方法。使用文件存储,企业的数据以与检索时相同的格式存储。企业可以通过Windows中的服务器消息块(SMB)协议或Unix或Linux中的网络文件系统(NFS)协议访问文件存储。

服务器消息块(SMB)和网络文件系统(NFS)是使企业能够以与将数据存储在客户端计算机上相同的方式将文件存储在服务器上的协议。企业可以挂载全部或部分文件系统,并在多个客户端设备之间共享访问权限。这些协议也通常与网络附加存储(NAS)设备一起使用。

网络附加存储(NAS)设备通常用于扩展文件存储,也能够以网络附加存储(NAS)备份的形式使用,用于为文件存储提供冗余。这些设备使扩展文件存储成为可能,否则文件存储将限于单个硬盘或物理连接的存储设备。

什么是块存储?

块存储是一种抽象底层存储设备上的存储的方法。块存储设备作为称为块的单元集群进行管理。在每个块中,企业存储单个文件的一部分。然后,为该块分配一个唯一的地址,使文件可以分散在多台计算机上存储,从而更有效地使用存储。

 

如果你能直接找到详细的资料,毕竟花费的时间足够短的话,那么也是没问题的。

源码学习

源码学习是一个需要花费大量时间和精力的事情,除非万不得已,否则我也不想用这种方式。因为,我们会缺少大量的上下文,这些上下文可能导致我们理解出现一些误差。

前期准备:

  1. 合适的工具。最好是~~收费的(🐶)~~能用上的。
  2. 合适的存储空间。像 Android 这样的系统,clone 下来就要 120G,编译的话,估计得达到 200G 吧;而像 Android Studio 的源码,clone 下来也要 60G。
  3. 寻找阅读的模式。
  4. 尝试去构建应用。它不一定可行,但是如果可以的话,会节省你大量的时间。

源码学习是一个非常重的学习模式。我们要花费大量的时间:

  1. 在代码间跳转
  2. 梳理业务逻辑

所以,还有一些不错的犯懒的姿势:

通过书籍来加强。我一直觉得对于学习来说,阅读书籍是最理想的方式。因为寻找资料需要成本,而多数的书都会起到一个索引的目的。

寻找相似的轮子。一个有意思的技术,必然有很多公司、很多人都研究过。他们都会尝试去创造类似的轮子。唯一的问题是,我们要学习到什么程度,如果只是理解的话,那么看看别人重复的轮子也是可以的;如果是为了深入的话,那么还得回过头去看看源码

借助测试调试

对于调试来说,我们还会面临的一个挑战是:诸如我这样的入门级 MBP 配置,对于大型系统来说编译根本不够用。应对这种问题的一个比较良好的姿势是:通过 IDE 调试测试来完成对部分代码的调试。(PS:这种方式也适用于业务代码的开发)

如果我们可以在应用的入口中创建某一模块对应的测试,那么我们就可以快速调试整个应用了。

fork 主流程

对于我来说,我觉得只阅读源码是一种只为了解决一时问题的方式。同时,像我这样的凡人,对于某些知识和内容,只要不使用,我可能隔个十天半个月,我就忘光了(虽然我一直觉得这是一件好事)。

边阅读代码,边 fork 项目,我们还会有一些挑战:

  1. 语言的熟练度和模式。对于熟悉的语言来说,比如日常编写业务代码的时候,我们并不需要理解于诸如类加载器、元编程、字节码这一类的复杂模式。
  2. 新的框架、工具或语言的学习成本。比如,我在过程中就遇到需要理解和学习 Gradle 插件的一些构建机制。
  3. 代码中大量的、无用的异常处理的代码。
  4. 别人的代码都是 💩。(PS:一个月后自己的代码也是屎)

所以,还有一些模式:

  1. 划分模块边界。寻找架构图,通过架构图来划分模块。
  2. 切片化运行。一个模块,一个模块来理解整个系统。如 IDEA 插件的编写、IDEA 插件与 Gradle 如何交互,Gradle 插件的原理与编写,Gradle 如何调用其它命令行工具,命令行工具的原理与编写。
  3. 通过测试运行。如针对于 ApkAnalyser 这样的工具,我们可以通过单元测试而非构建一个 CLI 的方式来运行。
  4. 选择另外一门语言。因为别人用 Java、Groovy、Kotlin 编写的应用,如果你用 Rust、Go 再写一遍的话,那么你就能一次学到两个东西了:一个是新的编程语言,一个是这个开源项目的代码。

README 输出

为了方便我们查阅和其他/她人使用,我往往会把相关的内容记录到项目的 README 上。

  • 相关的文档资料
  • 相似的开源项目
  • 过程中的内容产出
  • 代码简要说明
  • ……

这样一来,其他/她人在学习的过程中还能 GET 到相似的思路。

结论

最后,简单做一些成本对比:


(编辑:南昌站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读