自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 收藏
  • 关注

原创 【SDU Chart Team - Core】组件旋转模块、组件缩放模块、组件翻转模块

组件旋转模块、组件缩放模块、组件翻转模块这些组件模块解决了一些组件变换问题。其中组件旋转模块基于组件基础模块,并给出了实现;组件缩放模块和组件翻转模块是一个抽象的框架,需要留给具体的组件来实现。组件旋转模块解决了组件的旋转和多级旋转问题,并借助核心中提供的几何框架实现了组件坐标系。多级旋转旋转绑定组件旋转模块工作流组件缩放模块矩形的缩放缩放绑定组件翻转模块矩形的翻转翻转绑定......

2022-06-08 18:55:03 260 1

原创 【SDU Chart Team - Core】抽象组件接口 和 组件基础模块

抽象组件接口和基础组件模块抽象组件是对所有组件的泛化,也是所有组件的基类;基础组件模块是对这些抽象内容的基本实现。两者之间是继承关系。抽象组件接口固有属性反射式模块管理组件树形关系SVG图形几何学坐标系创建点点坐标系转换生命周期操作这些操作用于组件在生命周期中的各个状态间进行转移,这些操作被包含在画布管理,通过画布管理中的接口进行调用。初始化拷贝 & 克隆序列化反序列化 & 反序列化生成事件基础组件模块除了对组件抽象接口进行了完整的实现外,

2022-05-28 17:54:48 181

原创 【SDU Chart Team - Core】画布管理:维护画布 & 维护组件的生命周期

画布管理画布按照画布层次结构进行对象的维护,详见之前的文章:【SDU Chart Team - Core】画布层次结构。这篇文章主要讨论的是后端中如何进行画布管理:画布上下文上下文即一系列被维护的对象。其中主要包括:画布的SVG接口、二级层次中预定义域和组件图形域的SVG接口(前端域交给前端维护)、组件的集合(“后端Id-组件对象”映射关系)、预定义对象的集合(“SVG接口哈希-SVG接口”映射关系)、暂存区、画布范围。画布的SVG接口画布,即绘图区域,也是画布层次结构中的<svg&g

2022-05-26 21:41:38 261

原创 【SDU Chart Team - Core】组件的模块化设计和命令式接口

组件的模块化设计和命令式接口组件模块组件是个相当自由的内容,一切可移动可修改的图形在本项目中都被称为组件。由于组件的交互方式可以千变万化,行为也可以千差万别,所以要提出一种通用的框架来适应全部的变化很难。于是决定把修改方式和对应行为的实现交给用户,因此使用了一套非常自由的体系,这使得模块都是可插拔的。我们定义了一个基本的架构,实现了一些基本功能。用户需要的其他功能可以基于或部分基于这些功能,在这个架构上继续派生。 这个模型是增量的。框架框架图这是一个自底向上的设计思路。最底层是一个公共的接口,

2022-05-24 14:11:10 177

原创 【SDU Chart Team - Core】画布层次结构

画布层次结构画布的层次结构主要需要基于SVG的层次结构,但相比纯树形结构,做出了一些简化。二级层次结构画布最外层的<svg>表示画布,元素的坐标系也就是画布坐标系;关于画布的扩展、视角的移动缩放也都基于这个元素。为了方便管理,引入一系列组元素作为其第二级的结构,这些结构被称为域,拥有明确的分工。预定义域定义了一些需要预渲染的内容,其中的内容参与到部分组件的绘制,,是一个组元素<defs>。这些内容包括任何SVG元素,主要有表现箭头的<marker>、表现渐

2022-05-21 17:22:28 193

原创 【SDU Chart Team - Core】点的更新回调 & 基于回调传播图像更新

更新回调点的更新回调使用回调机制,允许设置回调函数:void Point2D::on_update(const std::function<void(const double &, const double &, const double &, const double &)> callback) { _callback = callback;}void Point2D::on_update() { _callback = [](co

2022-05-20 00:12:52 115

原创 【SDU Chart Team - Core】提交过程与提交算法

基于DOM Diff的提交算法提交过程SVGI中引入了提交过程,用于进一步优化渲染。提交过程提交指的是将此阶段被修改的内容提交到新的版本,得到所有更改,并对此进行优化。假设当前的DOM树为A,过去版本的DOM树为B,那么提交等价于A-B的Diff过程。但是显然,如果保存另一个过去版本DOM树B的拷贝,则开销太大了,因为此前的拷贝操作中将要拷贝全部的属性和树形结构,时间复杂度是 O(an)O(an)O(an) 的。由于提交的内容是对自身修改,我们不妨可以直接记录修改,提交被修改的内容。记录修改

2022-05-19 16:15:28 164

原创 【SDU Chart Team - Core】基于哈希的DOM Diff算法

基于哈希的DOM Diff算法DOM基本操作DOM基本操作类型对DOM的基本操作可概括如下:操作原语描述child i将游标设为当前的第iii个子节点parent将游标设为当前的父节点remove i移除第iii个子节点append html增加一个子节点,内容为htmlmodify attr x / reset attr修改或重置attr属性sort indices按照indices对子节点顺序重排其中child和parent对应

2022-05-19 00:21:16 182

原创 【SDU Chart Team - Core】DOM节点哈希

DOM节点哈希在项目实现过程中,经常涉及到基于内容进行比较的情况。所谓基于内容比较,其实就是推导出的HTML一致。原始方法显然计算一遍HTML是十分耗时的:对于最自然的,自顶向底的过程,遍历子树的复杂度是 O(n)O(n)O(n) 的,nnn为子树大小。当引入缓存机制后,计算自底向顶,需要遍历祖先,而且每个祖先需要重新使用儿子的缓存值,所以复杂度是 O(mh)O(mh)O(mh) 的,mmm为子节点个数,hhh为高度。然后进一步考虑比较的开销,对于生成字符串,其长度正比于子树大小,因此复杂度都是 O

2022-05-18 17:56:27 102

原创 【SDU Chart Team - Core】SVG和SVG接口类设计

SVG和SVG接口类设计SVG类SVG类用于在低层次表示一个树形的SVG结构。提供以下接口:标签属性子节点管理设置与获取原生HTML克隆与拷贝比较差异具体类定义SVG的抽象类,其中含有所有SVG元素使用到的公共内容,涵盖了上述所有接口。然后定义SVG的具体类,例如<rect>,<circle>等,它们在标签、设置属性、克隆拷贝、比较、差异这几个接口上具有多态性。接口定义标签一个虚函数get_tag。SVGElement中的实现是返回?。各个具体类中返

2022-05-18 17:03:40 321

原创 【SDU Chart Team - Core】关于本项目C++开发中的常见问题汇总

本项目C++开发中的常见问题汇总编译时OOP中的声明与定义问题模板元编程中的声明与定义问题OOP中的类型转换问题模板元编程中的类型推导问题指针与引用链接时运行时测试时

2022-05-18 12:58:39 130

原创 【SDU Chart Team】22.04.24 第九次会议

第九周会议:验收Demo集成测试已完成。额外工作:附着完成。普通富文本框、说明书单元测试完成,但未完成集成。需求分析和需求规格说明书大部分完成。缺少旋转、对齐。后端驱动模块、技术文档完成。核心框架情况、技术文档尚未完成目标,仍在完善。重点讨论内容基于需求和设计约束,前端该做哪些内容(需求:来自需求描述和规格说明书,设计约束明确前后端边界:前端发起、前端SVG只读、后端SVG只写)事件系统(已经遇到的问题:响应速度;可能遇到的问题:坐标系)

2022-04-24 21:34:26 233

原创 【SDU Chart Team - Core】SVG属性类设计之枚举

SVG属性类设计 (3)需求在SVG属性类设计(1)中,定义了基本SVG属性类,提供了泛型的实现方式。接下来我们需要让SVG属性能进一步适配枚举型属性,例如"a|b"的类型要求。(具体的例子:rect元素中的cx,其合法属性为"<number>|<length>")。由于其性质和元组一致,称之为属性元组。属性枚举的特点是包含多个不同的类型,且选取第一个非空合法类型值作为最终类型。设计属性枚举既有容器的性质又是属性,因此要包含泛型组件中的所有操作。底层容器仍然使用泛型

2022-04-23 16:49:58 1053

原创 【SDU Chart Team - Core】SVG属性类设计之元组

SVG属性类设计 (2)需求在SVG属性类设计(1)中,定义了基本SVG属性类,提供了泛型的实现方式。接下来我们需要让SVG属性能进一步适配组合型属性,例如"(a|b) (<number>)"的类型要求。(具体的例子:marker元素中的preserveAspectRatio,其合法属性为"(none|xMinYMin|xMidYMin|xMaxYMin|xMinYMid|xMidYMid|xMaxYMid|xMinYMax|xMidYMax|xMaxYMax) (meet|slice)")

2022-04-19 17:28:34 130

原创 【SDU Chart Team】22.04.17 第八次会议

会议概要对前八周内容进行复盘:进度与问题前后端计划原为完成Demo和集成测试,但出现协调问题和人员矛盾,故未完成。复盘问题的根源,客观问题在于并非现成框架没有相关经验,而主观问题在于前后端之前都是独立开发,没有进行完整的沟通与联系。所以尽管前后端都声称完成了计划,但是进行整合时问题频发。所以两者最后的结果就是相互推卸责任,表现为前端想要将后端所有的功能全揽(但并未完成),后端仅仅进行单人测试并没有适配前端。对于这个问题,不能回避。因为Demo的目的就是为了让前后端进行初次整合,以此发现问题

2022-04-17 23:59:20 156

原创 【SDU Chart Team - Core】SVG属性类设计之泛型赋值、绑定、提交

SVG属性类设计 (1)这个类的设计是为了将C++类型适配为符合SVG规范的类型。为了简化使用方的操作,SVG属性类中将提供C++类型到SVG规范类型的自动转换,并且提供绑定操作。需求整个类的设计涵盖以下方面:构造构造时指定对应的getter、setter。此步骤由组合了该属性的SVG进行,getter、setter由SVG内部提供。(不直接使用属性的引用是为了实现封装,将两者从设计分离以降低两者耦合度)赋值直接将某个值赋给这个属性,其中C++类型到合法SVG规范类型的转换被内部实现。赋值将解

2022-04-17 16:50:43 607

原创 【SDU Chart Team】22.04.10 第七次会议

会议概要仍然遵循第五周提出的目标:第五次会议但是具体设计被修改,部分计划需要变更。由于其他因素,更改了中期目标。进度与问题前端进度正在进行Demo制作,已解决socket通信问题,目前尚未实际调用后端。问题对前端边界不明确。(会议中已结合设计思路明确)后端进度正在进行Demo制作,目前尚未被前端调用。问题基于测试代码,过程未评估?(会议中暂不考虑具体实现细节,先实现给定功能为最高优先级)文字进度正在进行文本编辑组件制作。核心进度已完成

2022-04-11 00:52:03 769

原创 【SDU Chart Team - Core】通用坐标系转换

坐标系转换原始思路在上周的博客中记录了一种针对当前所定义的一些坐标系间如何进行转换的一个思路:https://blog.csdn.net/cyk0620/article/details/123902973。然而这个解决方案并不具有通用性,并且在转换中,甚至忽略了某些特殊情况间的转换。问题描述条件:现有七种坐标系:画布坐标系、组件坐标系及其相对坐标系、点坐标系及其相对坐标系、向量坐标系及其相对坐标系。每个坐标系有明确的几何意义。每个点除了坐标外还拥有一个坐标系。问题描述:实现一个函数,参数为在某坐标

2022-04-06 18:53:33 299

原创 【SDU Chart Team】22.04.03 第六次会议

会议概要目标于第六周提出:第五次会议对中期目标的进度进行进度评估遇到的问题及几种解决策略进度与问题前端进度Node-API未能成功配置,已锚定socket作为下位替代品,但接口尚未封装。问题Node-API的尚未成功配置:已决定使用socket替代前后端通信接口问题:到底是前端定义还是后端定义的问题,以及定义是否严格的问题,尚未解决后端进度实现了一部分计划功能,但是没有完成接口化,只是本地测试用。问题未接口化,未能弄清楚接口规格:详写前后端接口说明

2022-04-03 23:16:38 1159

原创 【SDU Chart Team - Core】一些预置点函数

一些预置点函数变换相同坐标系下,由一个点到另一个点。线性变换给定一个2×22\times 22×2的方阵MMM,然后对点进行该变换。p′=Mpp'=Mpp′=Mp直线对称给定两个点a,ba,ba,b定一条直线,然后找到点相对于该直线的对称点。首先得到ab→=b−a=(xb−xa,yb−ya)\overrightarrow{ab}=b-a=(x_b-x_a,y_b-y_a)ab=b−a=(xb​−xa​,yb​−ya​),由于对称与直线方向无关,取x轴分量≥0\ge 0≥0的方向,得到新的向量

2022-04-02 17:58:51 75

原创 【SDU Chart Team - Core】几种坐标系定义与坐标系转换

几种坐标系定义与坐标系转换坐标系类型画布坐标系组件坐标系点坐标系向量坐标系坐标系转换点无关坐标系转换点相关坐标系坐标系链转换

2022-04-02 17:02:26 597

原创 【SDU Chart Team】22.03.27 第五次会议

会议概要明确了中期目标(第七周结束前)提出了中期后目标(第八周到第十周)将部分计划延后,先实现较为简单的功能前端进度已完成界面绘制。中期计划学习使用Node-API调用C++:http://nodejs.cn/api/addons.html#node-api为后端提供的就接口进行封装关键点图标、画布网格中期后目标更多功能的UI:布局设置、点&线样式设置、文字样式设置文件相关:导入&导出、图片生成注释:Markdown后端进度已

2022-03-27 21:44:46 304

原创 【SDU Chart Team - Core】关于SVG和图形SVG

(对此前的文章进行了修改,使其更清晰化)矢量图坐标系 Coordinate描述一种坐标系坐标系说明画布坐标系画布的绝对坐标系组件坐标系以组件布局中心为原点的绝对坐标系组件相对坐标系以图形中心为原点,以图形矩形区域长宽为[−1,1][-1,1][−1,1]的相对坐标系点坐标系以一点aaa作为原点的绝对坐标系点相对坐标系以一点aaa作为原点,另一点bbb作为(1,1)(1,1)(1,1)的相对坐标系向量坐标系以一点aaa作为原点,ab→\ov

2022-03-20 21:58:18 601

原创 【SDU Chart Team】22.03.20 第四次会议

会议概要前端后端本周对前端和后端的接口进行了详见的讨论,纠正了一些错误,然后商量了后期某些功能的实现内容,决定对每个组件进行封装并抽象出一个父类,通过子类继承父类的抽象方法降低耦合度,便于后期对组件功能进行扩展,对于整个画布的扫描决定使用kd-tree进行加速,预计扫描组件的时间复杂度由O(n)降为O(logn),对抽象方法的细节进行设定:判断点与组件的关系:isInside(double x,double y);计算组件的关键点:calcPoint();由于每个组件对于不同的操作有不同反应,可

2022-03-20 21:56:19 373

原创 【SDU Chart Team - Core】关于组件、组件布局、二维点类

组件表示Lewzen中包含的一个组件,包含了一切行为、规则、上下文。一个组件由三个部分组成:矢量图、文字、布局。其中布局为组件整体在画布中的表现、矢量图描述了图形的样式与变化规则、文字描述了文字样式与内容。矢量图、文字中使用都是相对自己的图形坐标系。组件对其中的一些方法进一步封装,转化为画布坐标系。组件类 LZComponent属性组成arg: LZArrange *组件布局对象的指针。只读。vg: LZVectorGraph *组件矢量图对象的指针。只读。txt: LZ

2022-03-14 00:10:26 325

原创 【SDU Chart Team】22.03.13 第三次会议

会议概要进度回顾前端初步完成了需求分析;前后端定义了一些接口。(完成的部分包括几个核心栏目的定义)核心部分进行了部分概念分析,但仍然存在部分值得商榷的部分。(已经明确的概念包括矢量图、点、轮廓;尚未明确的概念包括坐标系、变换)计划下周进入代码开发工作。预计在三月底前完成基本的Demo。工作明确前端:绘制界面(组件区、上边栏、属性区、画布)、定义接口(组件操作、属性操作、画布操作、整体操作)后端:事件处理(组件事件、画布事件、属性事件、整体事件),其中包含边缘计算、内外部判断等。

2022-03-13 23:40:59 558

原创 【SDU Chart Team - Core】关于前端渲染svg的性能分析

性能原始svg在浏览器引擎中的呈现可以有如下三种方式:Decode为DOM对象’<svg>’通过base64编码为图像,然后在canvas上绘制转化为blob对象,生成url,然后在canvas上绘制关于选择这三种方式的理论基础:DOM对象一种最直观最先能想到的方式。由于原始svg就是基于XML,并且能直接由Html使用,因此前端能够直接将原始svg的代码嵌入网页中。这种方法的瓶颈之一是解码,即原始svg转换为DOM对象的过程。使用DOMParser的parseFromS

2022-03-10 14:35:46 2243

原创 【SDU Chart Team - Core】关于组件矢量图的概念分析

组件矢量图内概念分析坐标系坐标系说明画布坐标系画布的绝对坐标系图形坐标系相对图形的绝对坐标系点坐标系以另一点aaa作为原点的绝对坐标系向量坐标系以一点aaa作为原点,另一点bbb作为x轴上单位一的相对坐标系点关键点(蓝色点、黄色点)可由用户移动的点。根据关键点计算路径点。点的颜色:设计图形时自拟。一般维持图形轮廓的为蓝色点,确定图形细节的为黄色点。蓝色点一般无活动域,黄色点存在活动域。点的id和名称:用于区分各个点。关键点的活动域用户对

2022-03-06 23:49:43 277

原创 【SDU Chart Team】22.03.06 第二次会议

会议概要进度回顾初步完成了需求大致构想:功能解释矢量图形绘制svg图像,由关键点、路径、填充构成文字通过html、latex转为svg图像组件矢量图形+文字+组件属性画布相关依托canvas,在canvas上绘制组件的svg图像节点注解一段由markdown构成的注释,属于外围功能文字相关查找了相关资料、矢量图形完成了底层规划、后端查找相关资料、前端进行了大致需求分析。明确了边界和计划前端:上边栏控件、侧边栏控件、浮窗控件、画布控

2022-03-06 22:45:45 136

原创 【SDU Chart Team】22.02.26 第一次会议

会议概要初步探讨了各个部分的边界 前端:用户界面、画布浅层逻辑后端:复杂图形、画布深层逻辑矢量图核心:基础图形矢量图生成文字与公式:文字&公式矢量图生成项目前期计划第一周:立项。第二周:底层开始定制协议;前后端进行需求分析,并编写需求规格说明。第三周:底层完成协议文档;前后端完成需求规格说明书。同时开始编写系统规格说明、开发文档,详述逻辑结构与数据结构。第四周:开始进行实现,同时记录文档。第五周:实现与小型测试。前端编写简单的桩模块;后端完善事件逻辑说明;底层编写驱动模

2022-02-27 19:23:33 393

原创 【山大智云】山大智云体系结构总结

山大智云体系结构总结经过了一学期的学习以及全员总结,整个项目的架构和最初猜测的组织结构相似:并且组员们对其中的各个部件有了更详细的认识。子部件底层库libsearpcseafile系列部件中的内部通讯协议。仅服务端到服务端。(如seahub)libevhtpseafile系列部件中的外部通讯协议。服务端到客户端。(如seafdav)接口seaserv一个python库,用于调用RPC服务。采用C-Binding的方式绑定了seafile-server中定义的RPC服务

2021-12-28 22:50:59 654

原创 【山大智云】SeafileServer体系结构总结

2021SC@SDUSCSeafile体系结构总结本篇为系统综述。详细的代码分析和注释在我的一个Git仓库中:seafile-server-learn。子模块组件底层组件RPC协议通过libsearpc库实现的RPC协议。数据库管理对各种数据库API的封装。配置管理对配置文件的管理。消息队列借助libevent实现的消息队列。定时任务借助libevent实现的定时任务。加密借助openssl实现的加密。对象键值存储借助文件系统或NoSQ

2021-12-26 21:39:53 1315

原创 【山大智云】SeafileServer源码分析之Server核心服务

Seafile Server CoreSeafileSeverCore是seafile-server中的核心部分,提供了基于common各种子系统操作下的各种高级服务。这些服务在server下被定义与实现,最终被集成到了seaf-server和http-server中。前者是基于RPC协议进行服务,后者是基于Http协议进行服务。Seaf-Server (RPC)Seaf-Server是一个基于RPC的服务器服务,是一个后台运行的进程。这里RPC是基于另外一个库libsearpc,通过引用libsea

2021-12-17 23:21:13 860

原创 【山大智云】SeafileServer源码分析之GC、FSCK

2021SC@SDUSCGC服务GC 垃圾回收完成此项工作的相关源码:gc-core、verify、repo-mgr仓库的生效期、最大历史保留时间为了避免过多的历史版本以节省仓库的存储空间,允许用户设置仓库生效期和最大历史保留时间。仓库生效期描述仓库从何时起考试生效。在该时间后的仓库提交为有效提交版本;在该时间前的版本将被自动删除。这个量用关系RepoHistoryLimit维护。最大历史保留时间描述仓库内历史数据的最大保留时间。超过历史保留时间的版本将被自动删除。这个量用关系Re

2021-12-08 22:03:26 323

原创 【山大智云】SeafileServer源码分析之FUSE(用户空间文件系统)

2021SC@SDUSCseafile仓库管理仓库是一个文件系统的管理单位。之前介绍的分支、提交、文件、目录等对象,都是以仓库集中进行管理。此处介绍的只是FUSE中实现的最基本的seafile仓库管理,更完整的内容是在server核心中实现的。对象格式struct _SeafRepo { // 仓库对象 struct _SeafRepoManager *manager; // 仓库管理器 gchar id[37]; // 仓库id gc

2021-12-02 12:02:59 488

原创 【山大智云】SeafileServer源码分析之用户与用户组

2021SC@SDUSCseafile支持集群,实现了一个集群管理系统。这个系统的核心内容独立为另一个项目:ccnet-server,用以协调网络应用的运行。这篇文章主要介绍集群管理。集群中当然还有其他功能,例如对等体识别、连接管理、服务调用、消息传递等,而这些内容属于协议,在seafile : librpc 分析中可以找到。集群中分为三个层次结构:用户、群组、组织。集群管理就是对这三个层次的结构进行维护。三个层级依次递进,所管理的用户数量的数量级逐级递增。这三个层次的相关信息可以很方便地用关系模

2021-11-22 17:36:56 1119

原创 【山大智云】SeafileServer源码分析之版本管理系统:提交差异与合并

2021SC@SDUSC提交差异为了方便用户检视,以及为合并做准备,需要设计一种算法,来统计两个提交间的差异。在思考算法的具体流程前,需要先总结差异的类型。差异类型若有两个提交A, B,假设我们只考虑A相对于B的差异。文件差异差异说明符号添加A相对于B添加了该文件。A删除A相对于B删除了该文件。D修改A相对于B添加了该文件。M重命名A相对于B重命名了该文件,且内容尚未被修改。R目录差异差异说明符号添加A相对于

2021-11-18 01:11:52 308

原创 【山大智云】SeafileServer源码分析之版本管理系统:提交与分支

2021SC@SDUSCseafile中,此部分的相关内容与git大体相同。提交版本管理理论前提想要对仓库进行版本化管理,即持久化追踪仓库中的更新,则需要一个节点来存储每个版本下仓库内容的拷贝。这个节点就是提交。每次提交后,仓库将重新组织新的seafile文件系统,生成新的seafobj,产生新的块,也就是一个拷贝。但显然,每次都重新拷贝一份实在是太浪费空间了。这时候,分块、SHA1命名的作用就体现出来了。每次更新只会影响被修改的块,所有被修改的内容只会影响被修改的块;SHA1命名基于操作系统文件

2021-11-14 16:59:14 387

原创 【山大智云】SeafileServer源码分析之Seafile文件系统

2021SC@SDUSCSeafile文件系统相关代码涉及fs-mgr、seaf-crypt、vc-common。在还没介绍提交、分支管理前,可以认为每个仓库都是独立的文件系统。文件系统结构抽象结构每个仓库都带有一个seafdir作为根目录,根目录通过一系列直接或间接的链接形成 了文件树。整个文件系统中主要分为三个内容:seafile、seafdirent、seafdir。中间这个seafdirent指的是seafdir对seafdir或seafdir对seafile的链接。链接实

2021-11-04 17:49:14 594

原创 【山大智云】SeafileServer源码分析之Seafile对象存储

Seafile对象存储一些Seafile对象需要持久化至硬盘。它们的存储方式有两种,一种是非关系型存储,另一种是关系型存储。前者要求对象必须含有id。非关系型存储非关系型存储主要被Seafile文件管理系统所使用。因为Seafile文件管理系统是分布式的,而非关系型存储能为分布式存储提供良好的基础。相关代码的结构如下:与块系统类似,并且有多种实现方式。使用这种方式存储的的Seafile对象包括:commit、seafile、seafdir、seafdirent等。对象的逻辑位置只考虑Se

2021-10-28 22:21:53 1009

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除