1.如何开发微盘 微盘搭建微盘开发 控
2.该死!Github上这些C++项目真香
3.Seafile 存储模型探索
如何开发微盘 微盘搭建微盘开发 控
最近一段时间,国内网盘掀起大规模整改风,华为网盘、网盘、新浪微盘、篡改猴源码金山快盘等多家个人免费云存储业务都面临关停。这意味着网盘的免费午餐即将吃到头了。使用上述网盘服务的用户除了在限期内多准备硬盘,把自己的文件下载到本地硬盘上这个方法外,还可以选择搭建属于自己的私有云存储。
小编甄选了目前市面上存在的各种私有云服务,选择了Seafile 免费开源云存储服务进行介绍。据悉,该服务由国内团队开发,目前在全球已有万用户,包括北京大学、比利时的皇家自然科学博物馆、德国的 Wuppertal 气候、能源研究所等多家知名机构。任何个人和企业用户都可以自己搭建云服务器,享受云时代便利。该服务的pve 源码客户端和服务端软件均可免费下载,开源版的好处在于所有代码公开化,恶意代码和漏洞很难在众目睽睽之下生存。
该服务具备以下特点:
• 可靠的文件同步:文件组织成资料库。每个资料库可选择性的同步到任意设备。可靠高效的文件同步将提高您的工作效率。
• 内置文件加密:一个资料库可以用您选择的密码来加密。文件加密后再上传到服务器。即使是系统管理员也无法查看加密的资料库。
• 团队协作:可以共享文件到群组。权限管理、版本控制、事件通知让协作更为流畅。
• 高性能:Seafile 服务器内核由 C 语言编写。运行起来小巧快速。
• 升级简单:只需下载最新的软件包,简单一个脚本即完成版本升级。
• 适用于企业环境:可与 AD/LDAP 集成。可同步 AD 群组和用户信息。
Seafile客户端有Win7/Win8.1/Win、Mac、Linux等桌面版,也有Android和iOS版,arcdae源码也可以通过网页版连接;服务端支持Windows、Linux和树莓派系统。这表明该服务几乎支持所有系统。
在局域网条件下,其中的设备可以访问自己搭建的云存储服务器。如果你想要随时随地使用自己的云存储,则可以将Seafile部署到VPS、独立服务器,以及阿里云、Linode等云服务上。
另外,Seafile支持多服务器切换。比如你可以区分开私用和公用服务器,自己的文件可上传到私用服务器中,公司文件可以使用公用服务器同步,一切由用户决定。这样可不必担心其他用户有机会看到你的个人文件。
该死!Github上这些C++项目真香
在探索GitHub上寻找学习资源时,很多人可能会遇到大型且复杂项目,这些往往对初学者来说难以理解。但实际上,lineage源码GitHub上不仅有大型项目,还有许多适合不同学习阶段的资源。以下整理了一些从入门到实战的C++项目,供学习者参考。
首先,CPlusPlusThings 是一个全面的C++学习项目。它将学习内容分为基础、进阶、实战、新特性、设计模式、STL源码、并发编程、惯用法等多个部分。虽然在注释部分有些不尽人意,对新手友好度一般,但其系统性较强。通过天实战,可帮助学习者掌握语法和函数应用。
C-Plus-Plus 是一个收集了大量C++算法的集合,涵盖了计算机科学、数学、西部源码数据科学等领域,适合对算法有深入需求的学习者。通过对比多个实现,了解不同策略和优化方法。
CppTemplateTutorial 是一个中文的C++模板教学指南,旨在帮助读者理解模板语言。适合熟悉基本语法、STL及递归等编程方法的学习者。项目章节深入浅出,但遗憾的是,部分章节尚未完成。
MyTinySTL 是一个小型STL库项目,适合C++新手练习。它用C++重写了小型的容器库和算法库,代码结构清晰,带中文文档和测试框架,是学习实践的好选择。
Tinytetris 是一个终端版俄罗斯方块游戏,分为注释版和库版,适合对游戏编程感兴趣的初学者。通过此项目,可以学习基本的C++编程技巧。
计算器项目由微软开源,提供了标准、科学、程序员计算器功能,以及度量单位和货币转换功能。学习微软工程师编写的代码,有助于提高阅读源码的能力。
EliteQuant Cpp 是一个基于C/C++ 的多线程并发式高频交易平台,遵循现代设计模式,适合对高频交易有深入需求的学习者。它可独立运行,也作为其他项目的服务器端。
Seafile 是一个开源云存储平台,提供文件集中存储、共享、跨平台访问等功能。它具有强大的云同步功能,适合需要集中存储、共享文件的学习者。
Hikyuu Quant Framework 是一个基于C++/Python的开源量化交易研究框架,适合对量化交易感兴趣的学习者。它提供了策略分析、回测等功能,帮助理解系统化交易。
ApolloAuto 是一个开源自动驾驶平台,适合对自动驾驶领域感兴趣的高级学习者。它包含定位、感知、车辆规划、运营等多个模块,涉及AI和大数据技术。
这些资源覆盖了从基础到高级的C++学习阶段,适合不同层次的学习需求。通过系统学习和实践,可以提高C++编程技能。如果有更优秀的项目推荐,欢迎在评论区分享,一起学习进步。
Seafile 存储模型探索
Seafile是一个国内开源的网盘产品,具备社区版与专业版。在网盘类产品的研发过程中,对其部分源码进行了研究。Seafile采用类似于Git的模型进行文件存储,涉及几个关键概念。
Repo作为资料库,相当于一个存储盘,每个Repo创建时,会在Repo表中插入一条记录。Branch类似于Git中的分支,每个Repo默认包含一条master分支。
Commit相当于Git中的提交记录,每次文件上传或修改都会产生新的commit,并通过上图展示,master分支指向最新commit。通过branch的head commit和每条commit记录的parent_id,可以将所有提交记录按顺序串联。
Seafile没有采用MySQL存储commit和file元数据,而是直接将这些元数据以JSON文本形式存储至文件系统中。打开Seafile存储目录,可见三个主要文件夹:blocks、commits、fs。
blocks文件夹用于存储文件真实数据,采用CDC算法进行分块存储。commits文件夹存储repo的commit记录,每条commit对应一个文件,内容为commit数据结构的json字符串。fs文件夹存储repo中目录层级信息及文件信息,所有目录信息在fs目录下打平,文件层级关系通过fs文件内容表达。
在对commit记录分析中,每次repo变动生成新commit并写入commits文件夹。通过commit id定位文件,打开可见json文本内容,记录commit相关信息,如parent_id、root_id等。parent_id指向上一次commit id,通过branch head commit和各commit记录parent_id,可串联所有提交记录。
fs记录每次commit的快照信息,根据最新commit id定位fs目录,找到对应root_id的json文本。文本记录根目录下的文件信息,表示根目录及子目录文件结构。通过root_id定位目录元数据文件,查看内容,了解子目录及文件信息。
blocks记录文件数据块,以某个文件为例,通过commit id定位到block文件,查看内容为文件所有数据块id,对应blocks目录下的文件。
整体存储结构展示了文件树的构建过程。新建文件夹或上传文件后,commit记录更新,fs快照生成,blocks数据块存储。这种设计支持快速回滚到某版本,同时具备多端同步特性,但每次修改单个文件时,需生成所有祖先节点版本,造成写放大,深目录层级情况下需考虑性能损耗。