【问题标题】:sqlcipher 'open' performance with cordova and Cordova-SQLitePluginsqlcipher 'open' 性能与 cordova 和 Cordova-SQLitePlugin
【发布时间】:2014-02-10 05:02:03
【问题描述】:

我有一个相对复杂的 sqlcipher 数据库(27 个表),但条目很少(每个表在 50-200 个条目之间)。 当我运行 SELECT 语句(与相应视图相同)、加入 3 个表、执行几个“LIKE”(使用 EXPLAIN 优化)时,桌面客户端 CPU(使用 sqlcipher)需要 3ms 用于查询。

但是在 Android 上使用 Cordova-SQLitePlugin 执行相同的查询需要 几乎 1900 毫秒 - 因为 打开数据库 的成本大约为 1800ms,显然在每次页面加载后都会重复。

查询是这样发出的:

var db = window.sqlitePlugin.openDatabase({name: "myDatabase", key: "mySecret", bgType: 1});
    db.transaction(function(transaction) {
        transaction.executeSql(query, [],function(transaction, result) {
        callback(result);
    }, null);
    },null,null);

有什么我可以做的吗? 提前感谢任何提示和线索...

克里斯干杯

【问题讨论】:

    标签: android performance cordova sqlcipher


    【解决方案1】:

    SQLCipher 打开数据库的性能故意变慢。 SQLCipher 使用密钥 PBKDF2 执行密钥派生(即数千次 SHA1 操作)以防御暴力破解和字典攻击。请参阅http://sqlcipher.net/design 了解更多信息。

    最好的选择是缓存数据库连接,这样它就可以被多次使用,而不必在每个屏幕上打开和键入数据库。如果可能,在启动期间打开数据库一次是首选的操作过程。对同一个数据库句柄的后续访问不会触发密钥派生,因此性能会相当快。

    如果这是不可能的,另一个选项是禁用或削弱密钥派生。这将导致 SQLCipher 在派生密钥时使用更少的 PBKDF2 轮次。虽然这将使数据库更快地打开,但从安全角度来看,它的强度要低得多。因此一般不推荐。也就是说,这里是有关如何减少 KDF 迭代的信息:

    http://sqlcipher.net/sqlcipher-api/#kdf_iter

    【讨论】:

    • 感谢您的精彩描述。我已经看到了这种变化,但没有意识到这会对性能产生巨大的影响。不幸的是,Cordova-SQLitePlugin 不能保持数据库打开 - 更改密钥派生实际上节省了大约 1400-1800 毫秒......(!!!)。我现在将评估优缺点,再次感谢!
    猜你喜欢
    • 2018-12-19
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多