【问题标题】:How to share a page for two or more users? [closed]如何为两个或更多用户共享一个页面? [关闭]
【发布时间】:2020-01-11 10:29:01
【问题描述】:
我有理论问题。首先,我需要向您展示我的应用程序:
如您所见,您可以使用 ER 图创建数据库并生成一些 SQL 代码。单击按钮后,您将能够在我的本地数据库中创建自己的架构。每个用户都可以创建无限的模式。
这是我的问题:
如何允许两个或多个用户同时处理同一个图表?
在类似的应用程序中如何解决这个问题?
在线数据库向导会生成一个任何人都可以访问的链接,然后这样一群人同时在处理一个图表。
编写这样的程序很难吗?
有人可以给我一些提示如何实现这样的事情吗?
我正在使用:java 1.8、spring boot、hibernate、js、jquery
【问题讨论】:
标签:
java
html
spring
spring-boot
spring-security
【解决方案1】:
这变得非常复杂、快速。问题是合并。 如果某些给定数据(例如“人员”框)被两个不同的用户同时以相互冲突的方式编辑,您可以做出一些选择:
- 完全拒绝任何“第二”的人进行编辑,并向他们显示错误。
- 加倍努力尝试合并更改(但是,除非您有仅附加的数据集并且排序或决策基础无关紧要,否则不可能总是成功;通常情况并非如此)。
- 让一切尽可能生动。你输入一些东西,每个也在编辑它的人都会尽快看到它。如果人们遭受网络连接速度慢的困扰,那么冲突就会发生并搞砸;就这样吧。
- 不允许同时编辑任何可能发生合并冲突的内容(因此一个用户可以编辑框 1,另一个用户可以编辑框 2,但他们不能同时编辑同一个框)。
“更酷”的答案显然要复杂得多。
一些例子/方法:
一般来说,对所有内容进行版本控制是个好主意。有 ID 号(或时间戳,但你必须确保你的时钟永远不会倒转;一些 ntp 守护进程可以做到这一点。闰秒之类的东西,所以这比听起来更难),并且每次实际编辑总是有“我正在使用 ID X 的版本,现在我希望它看起来像 Y”——这样如果你的数据库中的当前版本不再是 X,你就可以拒绝这样的编辑。对于事务性数据库,这保证永远不会失败。
如果您只想在同时编辑时出错,以上就是您所需要的。
通过聊天可以极大地帮助同时编辑。 Google Docs 就是这种技术的明显例子。显然,这在服务器上相当复杂和繁重。
如果您要使用“无同时编辑”例程,然后编辑资源,客户端会向服务器请求锁定,一旦完成,它就会放弃锁定。如果锁已经分发,您的服务器要么等待,要么显示错误。 (当然,您可以提供只读版本)。但请确保正在发生一些积极的 ping 操作;如果有人客户通过网络电缆绊倒,您不希望资源被“卡住”!