我一直处于这种困境中一段时间,但是找不到任何提示,尽管似乎有人已经做到了。
我需要的是用加密的安全(即非连续!)ID替换顺序的AUTO_INCREMENT(或等效的)主键,但与此同时,我想保留顺序PK的性能优势:保证未使用的下一个ID,可集群性等。
一种简单的方法似乎实现了一种加密伪随机排列生成器,以将2 ^ N空间唯一地映射到2 ^ N,而不会发生冲突并且具有初始化矢量(IV)。
尽管可以在外部实现,但这确实需要存储和原子访问状态(排列位置或最后一个ID),这意味着从外部实现效率极低(这相当于UPDATE table SET crypto_id = FN_CRYPTO(autoincrement_id) WHERE autoincrement_id=LAST_INSERT_ID()为每个都运行后续操作INSERT)。
您是否知道在商业用途的数据库中有上述任何上述实现?
场景:
我们有一个MutationObserver处理函数handler。
在中handler,我们进行了一些会handler再次触发的DOM操作。从概念上讲,我们将有一个可重入handler电话。除非MutationObserver未在线程中运行,否则它将在handler完成执行后触发。
因此,handler将触发自身,但通过异步队列,而不是线程内。JS调试器似乎知道这一点,它将在调用堆栈中(即使用Chrome)作为异步祖先出现。
为了对事件进行有效的反跳,我们需要对其进行检测;也就是说,如果handler是由于自身触发的更改而被调用的。
那该怎么办呢?
mutationObserver=new MutationObserver(handler);
mutationObserver.observe(window.document,{
attributes:true,
characterData:true,
childList:true,
subtree:true
});
var isHandling;
function handler(){
console.log('handler');
// The test below won't work, as the re-entrant call
// is placed out-of-sync, after isHandling has been reset
if(isHandling){
console.log('Re-entry!');
// Throttle/debounce and completely different handling logic
return;
}
isHandling=true;
// Trigger a MutationObserver change
setTimeout(function(){
// The below condition should not …Run Code Online (Sandbox Code Playgroud)