如果做一个支持协同编辑,文档共享,类似 yuque 那样的 应该怎么技术选型?
自己做了一款 web 的笔记软件,目录树结构,markdown 格式存储,支持协同编辑和公开分享(单页),遇到一些问题,
想请教一下各位
目前用 go 写的,协同用的 websockets 进行广播,存储用的 mysql,搜索索引用的 bleve
数据库的设计比较简单
notes 表除了常规的内容存储,加了一个ParentId
来存储上级节点的 ID 来实现的无限下级
但是无法解决权限问题,比如我创建了一篇笔记本下面有 N 篇子笔记
我把笔记本分享给了 A,A 在下面又创建了 N 个子笔记,这玩意权限应该怎么管控
现在比较蠢,笔记 ID 用的 UUID,保证唯一性不能被遍历导致越权修改,
在通过笔记绑定 UID,设置只能由拥有者进行删除 /移动操作.
实际上如果知道其他人的笔记的 UUID 就能进行读取了..
目前协作编辑,实际上就是把分享的 UUID 共享给目标用户,这样他就能通过这个 UUID 来遍及下级节点进行编辑了.
想过用中间表来管理每一篇笔记的权限,但是感觉如果并发高是不是性能会差一点,虽然可以用缓存等方式解决
就是公开分享,目前只能分享单页,也是因为上面的问题不好做权限管理,如果分享了 A 笔记本,下面有 1 万篇子笔记
如果用中间表势必要创建 1 万个权限表的数据..
如果想实现类似 obsidian 之类的双向链接功能
是不是要把文章拆分成 block
然后用一个中间表来管理 block 的类型和链接
现在用的绑定到编辑器的 onchange 事件,如果发生变化就更新,但是如果并发比较高的话感觉性能是个很大的问题,加上会有一些 api 会做一些比较多的实时写入,感觉 mysql 不是很好的选择
是不是用 mongo 会更好,但是现在用 gorm 做的绑定用起来确实方便,改成 mongo 感觉大部分数据库部分都得手撸语句.
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.