如何多人共同编辑_如何实现可多人协作的“在线excel”系统?
多人协作在线文档的概念,最早由Google Docs带入中国。但实际上,在日常工作中,与团队的其他人进行协作是一种在常见不过的工作方式。
由于工作分工、工作进展的不同,团队内部的信息往往需要及时同步,然而伴随着团队经营规模的不断扩大,在线协同、多人协作,以及软件项目管理等问题将会接踵而至,成为制约企业高效发展的瓶颈。
这些问题,通常表现为:
- 跨部门、地区协作不便
- 过度依赖文件夹共享的形式,不能确保文档的安全性
- 没法纪录和体现职工对文本文档的意见和评价
- 文档记录发生变更时,无法及时通知到相关部门和员工
- 文档无法在线协同编辑,缺失必要的流程管控
- 多人共同编辑一个文档,无法留存修改记录和历史版本
针对上述问题,目前最佳的解决方案是:使用一款可多人在线协同办公的软件或工具。市面上,这类软件有很多,比如国外的Google Docs、Office365,以及国内的腾讯文档、石墨文档、有道云协作等。
本文将不再过多赘述这类成品软件,而是深入协同办公系统的实现原理,从企业IT管理者的角度出发,深入研究多人协作的形式、基础和难点,分析一款开发工具应具备怎样的特点,才是实现多人协作“在线excel”系统的关键。
以下内容,节选自葡萄城公开课《如何实现可多人协作的“在线excel”系统?》,欢迎大家提前预约。
多人协作的形式:历史与发展
多人协作的历史十分悠久,起源于静态的多人协作模式,即每个人先完成自己的工作,然后再进行汇总。
静态的多人协作模式
- 递增式协作
- 邮件:你来我往
- 论坛:跟帖回复
- 独占式协作
- 文档传递
- 微软VSS
- 合并式协作
- SVN
- Git
- diff,patch,merge指令
常见的静态多人协作方式
从静态到动态
静态协作的比喻
- 拼接画
- 积木
静态协作的特点
- 多版本
- 块操作
- 有协作动作
静态协作的缺点
- 版本碎片化
- 缺乏时效性
- 协作动作成本高
静态多人协作的成本,会随着加入人数和项目的复杂度呈几何级数的增长。因此,对于企业来说,急需一种无协作动作、唯一版本、版本可控的无协作成本模式,即动态多人协作模式。
动态的多人协作
动态协作的比喻
- 一起画黑板
动态协作的特点
- 唯一版本
- 原子操作
- 无协作动作
动态协作的优点
- 版本可控
- 实时
- 无协作成本
典型产品
- Office Online
- 石墨
- OnlyOffice
多人协作的基础:原理与架构
任何信息,无论其是什么展现形式,如果要做到多人实时编辑与展现,只需要实现以下三步而已:
- 操作化
- 可传输
- 可还原
举例说明多人协作的实现方式
操作化
操作化,指任何信息都可以转换为一组操作的集合。很容易理解,但它仍有不少值得思考的点:
1. 分割与组合
· 如何保证:信息的所有变化都可以分解为操作的集合?反之,操作如何覆盖出信息的所有变化?
· 分割的颗粒度如何决定?
• 粗一点?
• 细一点?
• 如何兼顾解释性与扩展性?
2. 绝对操作与相对操作
· 绝对操作
• 针孔打印机的完美世界
• 打印机时代的编辑噩梦
- 相对操作
• 4K电视不是梦
• 为什么数字电视稳定性不如模拟电视
- 绝对操作与相对操作比喻:时间与空间的互换
- 使用一款开发工具:SpreadJS,实现操作化的优势:
- 好用的指令集,保证覆盖信息的全部变化与操作的集合
- 经过实践验证的颗粒度,完美兼顾解释性与扩展性平衡
可传输
可传输,就是指操作有办法通过网络传输给其他终端。实现动态多人协作,需要考虑以下几点:
- 传输内容
- 原始文本
• 清晰
• 冗余
- 压缩技术
• 逻辑压缩
• 协议压缩
• 手动压缩
- 网络协议
- Socket
• TCP
• UDP
- HTTP
- WebSocket
- QoS(Quality of Service,服务质量)
- 快速失败
- 自动回滚
- 自动重连
- 自动恢复
可还原
可还原,就是指接收到来自网络的操作消息后,可以在本地完全一致地再次执行该操作。可还原包括了:
- 绝对操作的还原
- 控制体积
- 合理的提示
- 相对操作的还原
- 严格的顺序性
- 从源头保障顺序性
- 顺序性的补救
- 本地操作的还原
- 过滤收到的操作集合
- 从源头细化操作颗粒
- 本地保存本地执行
- 无入侵的还原
- 定义入侵
- 排除入侵
- 千人千面
多人协作的难点:乱序与冲突
乱序
乱序的表现形式如下图,小明在客户端执行了一系列操作,传递到服务器时发生乱序,导致小花看到了截然不同的信息:
为了解决乱序问题,可以尝试以下方法:
1. 用性能换取顺序正确——基于协议
2. 用性能换取顺序正确——基于回执
两种方法的优缺点
- 基于协议
• 优点
· 可靠,历经考验
· 简单,无需开发
• 缺点
· 资源开销高
· 必须整套使用
- 基于回执
• 优点
· 自主可控,按需开发
· 资源开销可控
• 缺点
· 需要自己投入开发
· 应用层逻辑控制使得网络复杂度向外蔓延
· 复杂度带来维护成本
基于乱序处理方法的总结
网络不是绝对可靠的,为了实现相对可靠,需要付出一定的代价,企业需要考虑的是:如何衡量所付出的代价与产出成正比。
冲突
比乱序更高级的一种表现形式,存在多向、多维度等问题。
如何避免错误的蔓延?
原则:任何一次不一致,都会导致后续的操作基于错误的信息进行,从而不断扩大错误,造成无法收拾的结果。因此,不一致是不能被容忍的。
解决办法:
- 严格一致性:独占
- 最终一致性:检查与修复
- 非技术手段:设计与提示
严格的一致性
独占就是同一时间同一范围只能由一人操作。
- 范围(以SpreadJS为例)
- 整个表格,类似VSS
- 工作表
- 单元格范围
- 排他性
- 独占冲突时,必有一方被弹开
- 直到占有者解开,不然无法占用
- 占用前无法操作
- 原理和锁基本一致
- 优点
- 可以确保严格一致性,不会产生多版本的错误累积
- 比起修复恢复这类弥补手段,一开始就不出错的成本最低
- 逻辑清楚简单,开发维护成本低
- 缺点
- 静态协作的味道
- 独占动作严重影响体验
- 大幅降低协作效率
- SpreadJS提供的支持
- 锁定工作表
- 锁定单元格
最终一致性
基于唯一正确顺序,察觉客户端的错误,撤销错误操作后重新执行正确的操作。
- 唯一正确
- 服务器到达顺序
- 协作边界分流
- P2P+选举算法
- 察觉错误
- 服务器回执id
- 服务器回执操作,MS
- 撤销错误
- 撤销到错误发生前的一步操作的结果
- 利用SpreadJS的撤销功能
- 利用操作版本快照
- 重新执行
- 操作队列需保存
- 区分好无感知执行与显式执行
非技术手段
技术手段追求错误0发生,而非技术手段则可以降低错误发生的可能性。
- 选中框
- 非常重要但不显眼
- 人性化的独占
- 操作的预期
- 协作感
- SpreadJS提供高度可自定义的边框
- 协作设计
- 设计协作区域与合并手段
- 设置权限
- SpreadJS提供几乎Excel的所有公式
- SpreadJS提供了工作表和单元格锁定功能
- 单向协作
- 区分单向与双向协作的场景
- 对单向协作尽量放开
- 对双向协作严谨设计
针对多人协作难点的总结
首先,可以明确一点:SpreadJS完全可以用作多人协作系统开发的组件。原因在于:
• SpreadJS的产品质量是毋庸置疑的
• SpreadJS在设计之初,便考虑到了多人协作的可能,而除此之外,绝大多数的前端产品都不是为了多人协作而设计的
• 多人协作需要中心系统的支持,SpreadJS基于纯前端的体系架构可以很容易的嵌入系统开发,而无需过多考虑与原生系统的兼容性,这是常规组件是无法做到的
• 要实现多人协作,需要投入一定的开发成本,SpreadJS作为一款开发工具,可以有效帮助开发人员减轻代码量
多人协作表格的本质:
• Server – Clients 中心系统,类似数值敏感的小型网游
• 任何这类系统都是在体验和正确性中寻求平衡
多人协作表格的特点:
• 表格的数值敏感性高于网游,数据操作和存储的挑战更大
• 表格的计算复杂度更高,尤其涉及复杂公式嵌套与全量统计筛选
• Web存在天花板,所以复杂的页游并不多见,端游较多
对SpreadJS这类开发工具/组件的展望与期待
1. SpreadJS 已经可以很好地支持多人协作的最终一致性。如果能支持多人多撤销队列,或者撤销重做自定义,那么就可以给用户提供更加易用且多样化的体验效果,从此丝般顺滑不是梦。
2. SpreadJS的绝大部分功能是支持命令的,这使得操作化变得更简单。如果SpreadJS能开放命令自定义,便可以让自主控制颗粒度成为可能,用户可以针对具体的业务逻辑做出更加精细化的操作转换,大幅提高协作效率。
3. SpreadJS不仅在数据录入、数据填报等方面表现出强大的功能,其各类统计分析与图形化手段也是一个不少,一旦明年的透视表功能上线,使用SpreadJS开发在线协同系统的数据商业价值将更易体现,用户将体验到“表格”无限的魅力与威力。
4. 表格在多人协作中的数据量增长速度比单人使用时快得多,希望SpreadJS可以支持更大的数据量,尤其是在大数据量情况下仍旧保持操作的性能与体验。
以上就是本期公开课《如何实现可多人协作的“在线excel”系统?》的部分摘要,如果您对在线协作系统的开发感兴趣,点击文末了解更多,预约课程。
如何多人共同编辑_如何实现可多人协作的“在线excel”系统?相关推荐
- 如何实现可多人协作的“在线excel”系统?
由于工作分工.工作进展的不同,团队内部的信息往往需要及时同步,然而伴随着团队经营规模的不断扩大,在线协同.多人协作,以及软件项目管理等问题将会接踵而至,成为制约企业高效发展的瓶颈. 市面上,可多人在线 ...
- 如何多人共同编辑_微信编辑器可以多人协作排版吗?
微信公众号图文怎么分享出去让别人帮忙排版?微信编辑器协作排版技巧 哈喽,大家好,猫头鹰今天又双叒叕来分享微信编辑器使用小技巧啦,今天我们讲的这个功能或许有的小伙伴已经知道了,主要是给那些还不清楚该功能 ...
- 想实现多人协作的“在线Excel”?真没那么简单
本文由葡萄城技术团队原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. Excel是我们办公中常用的工具 ,它几乎能为我们处理大部分数据,友好的交互 ...
- python为什么这么多人开始炒股_炒股90%的人会亏钱,为啥还有那么多人去炒股?...
已逝的复旦大学管理学院教授.知名证券专家谢百三曾讲过这样一句话:不入股市,没有亏损的危险,但有一辈子贫困的危险. 我觉得,这是对这个问题最好的回答. 亏损与贫困,哪个更可怕? 我觉得贫困更可怕.亏损只 ...
- messenger支持查找附近的人功能吗_可以查找附近的人那个软件叫什么?
2018-05-29 怎样查找刚删除的软件 你查找他的QQ号,再加他为好友就可以了;可以去QQ好友(群)恢复系统恢复好友.huifu.qq.com/系统可供用户恢复好友的范围和类型如何?1. 时间范围 ...
- 基于cnn的人脸识别_基于卷积神经网络(CNN)的人脸在线识别系统
微信搜索"AI大道理",选择"置顶"公众号 重磅干货,深入讲解AI大道理 ------ 本设计研究人脸识别技术,基于卷积神经网络构建了一套人脸在线检测识别系统, ...
- Excel多人同时编辑的几种方案与比较
1.写在前面的话 本人从事信息化工作多年,对Excel等电子表格的多人同时编辑接触较早,帮助客户实施的方案也较多,因此有些体会和认识.正好看到网上这方面的讨论较多,但都不完整,我就进一步做了专题调研, ...
- 模拟人体质检测_网络通信模块
模拟人体质检测_网络通信模块 Introduction 模拟人体质测试是研一在实验室参与的项目,为期4+个月, 整个项目的架构(数据传输是双向的): 体质测试传感器-stm32-cc2530通信板-c ...
- python共享文件协同编辑_那些可多人协作编辑的在线文档工具
最近使用了下石墨文档,简直就是在线版的Word,Excel,PPT,而且可以多人实时编辑预览,真的太好用了,搜索了下发现这种在线文档工具还挺多的,这里做个整理推荐. 石墨文档 这个很多人应该都用过,石 ...
最新文章
- 浅谈对腾讯云微信小程序解决方案服务端的理解(主要针对信道服务)
- ospf hello时间和dead_深入理解OSPF协议----第二讲:OSPF报文类型
- Apexchart整数多出小数点
- 让您的Xcode键字如飞
- python dataframe 查看为空值_Python pandas.DataFrame 找出有空值的行
- linux grub error 22,Linux系統grub常見錯誤問題解決
- 【Spring】HttpMessageNotWritableException No converter found for return value of type
- linux 屏幕输出 高亮_通过printf设置Linux终端输出的颜色和显示方式
- 【干货】B站品牌营销指南.pdf(附100页pdf下载链接)
- linux安装 grub失败,安装linux+windows的系统 如果grub引导失败的解决方法
- 蚂蚁、字节、拼多多,你的简历能通过几家?
- linux中nmcli命令使用及网络配置
- git version可以卸载吗_sourcetree使用:问题是有推送提示,但显示为空。原因:git版本过低...
- (转)Android开发书籍推荐:从入门到精通系列学习路线书籍介绍
- linux停止license服务器,LICENSE · 机器不学习/linux-command - Gitee.com
- 如何下载使用期刊 LateX 模板
- 马尔科夫区制转移向量自回归模型,MSVAR模型,MS-VAR模型的使用和操作过程
- maxscale mysql 主从_MariaDB主从配置与MaxScale实现MySQL读写分离
- kubernetes中容器(pod)间的通信及环境变量设置
- TouchScript中文---The Journey of a Touch Point
热门文章
- windows相关知识点分析
- mysql数据库提示本地无法连接远程服务器(Host is not allowed to connect to this MySQL server)解决办法
- C#中跨线程访问控件问题解决方案
- MFC之实现鼠标自动左击,频率可调,支持热键
- 华为人工智能计算机平台,华为发布首个人工智能移动计算平台
- stm32车牌识别_基于STM32单片机的车牌识别
- 机器学习中数据集的拆分
- SQL注入——基于报错的注入(五)
- oracle开窗函数是什么,ORACLE数据库(六)-----开窗函数
- confirm修改按钮文字_踏入MG动画设计的门,才知道文字动画这么重要……