【发布时间】:2016-09-10 16:01:23
【问题描述】:
背景故事
我在 Android 客户端的后端工作。要显示的数据很多,需要一些离线功能,所以我必须解决同步问题。所述数据由临时表组成。
我们的解决方案
现在,为了让客户端了解可能的更改,而不是强制执行完整的客户端数据库擦除和创建(需要很多时间),我对每个临时表进行 散列行。所述散列是通过获取临时表行,为其创建一个 JSON,然后从该 JSON 中生成一个散列来创建的。它正在工作。
我对这个解决方案的问题
我认为这不是理想的解决方案。所有这些操作看起来都要求很高,从我的测试中可以看出:
- 对于每个数据;基线,无操作 = 90 毫秒
- 在其中填充一个临时表,每个缓冲区复制 = 400 毫秒
- 在 for each = 2 880 ms 内填充后使用上述解决方案计算哈希
我想要什么
如果我们做错了什么,我很感兴趣。这个问题有更好的解决方案吗?有没有对每个单独的临时表记录创建散列要求不高的方法?
我们目前正在使用 OpenEdge 10.2B。
负责创建哈希的过程,create_hash 创建小部件池。
define input parameter inp_hBuffer as handle no-undo.
define output parameter out_cHash as c no-undo.
define var ttDynamic as handle no-undo.
define var hBufferTT as handle no-undo.
define var lResult as l no-undo.
define var cDataTT as longchar no-undo.
define var itime as i.
do on error undo,return error:
if not(valid-handle(inp_hBuffer) and inp_hBuffer:type = 'BUFFER':u) then
return error substitute('Neplatny typ vstupniho parametru predaneho procedure "&1".','m_ghashb':u).
create temp-table ttDynamic.
ttDynamic:add-fields-from(inp_hBuffer).
ttDynamic:temp-table-prepare(inp_hBuffer:table).
hBufferTT = ttDynamic:default-buffer-handle.
hBufferTT:buffer-copy(inp_hBuffer).
ttDynamic:write-json('longchar':u,cDataTT).
out_cHash = hex-encode(md5-digest(cDataTT)).
end.
return.
及其用法
for first lbUsrtab where
lbUsrtab.ucje = GetUcje('m_usrtab':U) and
lbUsrtab.login-name = LoginName no-lock,
each lbWcesta where
lbWcesta.ucje = GetUcje('wcesta':U) and
lbWcesta.kodu = lbUsrtab.kodu no-lock,
each lbWciorg where
lbWciorg.ucje = GetUcje('wciorg':U) and
lbWciorg.cest = lbWcesta.cest no-lock,
each lbKontaktr where
lbKontaktr.ucje = GetUcje('kontaktr':U) and
lbKontaktr.corg = lbWciorg.corg no-lock
by lbKontaktr.zako descending
on error undo, return error return-value:
create ttKontaktr.
buffer-copy lbKontaktr to ttKontaktr.
run create_hash(input buffer ttKontaktr:handle, output ttKontaktr.hash).
end.
我想要什么
- 要知道我们是否做错了什么,由于某种原因,这个解决方案在我看来并不正确,我相信有人也必须面对这个问题(创建临时表的哈希)
- 这确实需要很多时间,并且将来应该是一个问题,所以我想尽快解决这个问题
【问题讨论】:
-
怎样才能使解决方案“更好”?更短的时间?内存少?更可维护的代码?如果您发布显示当前解决方案的示例代码也会很有帮助。
-
嗨,汤姆,感谢您的反应。我已按要求更新了问题。更少的时间是我最大的问题。
-
优秀的文章!
标签: progress-4gl openedge