我最近在Sybase数据库中发现了一个使用"timestamp"类型列的表.如果我使用这个神秘的时间戳数据类型创建一个表
create table dropme (
foo timestamp,
roo int null
)
insert into dropme (roo) values(123)
insert into dropme (roo) values(122)
insert into dropme (roo) values(121)
select * from dropme
go
Run Code Online (Sandbox Code Playgroud)
我从'select*from dropme'获得以下内容:
foo roo
-------------------- -----------
0x000100000e1ce4ea 123
0x000100000e1ce4ed 122
0x000100000e1ce509 121
Run Code Online (Sandbox Code Playgroud)
0x000100000e1ce4ea对我来说看起来不是很时间.另外,我从'sp_help timestamp'看到了这个输出:
Type_name Storage_type Length Prec Scale Nulls Default_name Rule_name Access_Rule_name Identity
--------- ------------ ------ ---- ----- ----- ------------ --------- ---------------- ----------
timestamp varbinary 8 NULL NULL 1 NULL NULL NULL NULL
Run Code Online (Sandbox Code Playgroud)
我正在研究类似于pastebin的东西(是的,它是通用的),但允许多个用户编辑.显而易见的问题是多个用户试图编辑同一个文件.我正在考虑当一个用户正在处理文件时锁定文件(这不是最好的解决方案,但我不需要太复杂的东西),但为了防止/警告用户我显然需要一个用于监控每个用户的编辑会话的系统.使用数据库和ajax,我正在考虑两个解决方案.
第一种方法是让编辑页面以任意间隔(例如一分钟)ping服务器,它将更新数据库中的编辑会话条目.然后,下一次脚本请求编辑时,它会检查最近的ping,如果最近一次是另一个任意时间,比如五分钟,那么我们假设前一个用户已退出,并且可以再次编辑该文件.当然,这种方法的问题在于前一个用户退出的假设只是一个假设.他可能有一个片状的Wi-Fi连接,只是在窗户仍然打开的情况下辍学十分钟.
当然,为了解决这个问题,我们必须让服务器响应来自先前关闭的会话的新请求并发出错误,告诉客户端指出用户他的会话已经结束,然后处理它比方说,将其保存为服务器上的另一个文件并要求用户手动合并等等.不言而喻,这对最终用户来说相当可怕.
所以我想到了另一个解决方案.unload当用户的会话结束时,也可能会触发事件,但我无法确定这是否可靠.
有没有人对这个问题有任何其他更优雅的解决方案?