小编Din*_*inu的帖子

生成加密的安全ID,而不是顺序标识/自动递增

我一直处于这种困境中一段时间​​,但是找不到任何提示,尽管似乎有人已经做到了。

我需要的是用加密的安全(即非连续!)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)。

您是否知道在商业用途的数据库中有上述任何上述实现?

sql database cryptography

8
推荐指数
1
解决办法
246
查看次数

检查JS中的异步函数重新输入

场景:

我们有一个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)

javascript mutation-observers

6
推荐指数
1
解决办法
192
查看次数