【问题标题】:Sqlite for disk backed associative array?用于磁盘支持的关联阵列的 Sqlite?
【发布时间】:2010-10-17 12:05:35
【问题描述】:

我想将 SQLite 用作保存到磁盘的关联数组。

这是个好主意吗?我担心每次执行以下操作时都必须解析 SQL:

database["someindex"] 必须被翻译成类似

select value from db where index = 'someindex' 这又必须被翻译成 SQL 内部语言。

【问题讨论】:

  • 价值观有多大?它们是键入的还是只是字符串?
  • 我现在打算使用字符串。

标签: c++ sql database sqlite persistence


【解决方案1】:

如果您担心 SQL 开销,并且只需要一个简单的关联数组,那么像 GDBM 或 Berkeley DB 这样的 dbm 亲戚可能是一个不错的选择?

【讨论】:

  • 如果 GPL 是个问题,那么可能是 PDB (mission-base.com/peter/source)——这似乎是 LGPL,虽然我自己没有使用过这个库。
【解决方案2】:

查看 sqlite 参数以获得变量的简单方法 sql

【讨论】:

    【解决方案3】:

    SQLite 作为基于磁盘的关联数组应该非常快。记得使用prepared statements,它解析和编译一次你的SQL,可以多次调用;它们对SQL injection attacks 也更安全。如果你这样做了,你应该从 SQLite 中获得相当不错的性能。

    对于简单的基于磁盘的关联阵列,另一种选择是文件系统;这是一个非常流行的基于磁盘的关联阵列。在文件系统上创建一个目录,每个条目使用一个键。如果您需要超过几百个,则为每个密钥的两个字符前缀创建一个目录,以使每个目录的文件数量保持在合理范围内。如果您的密钥作为文件名不安全,请使用 SHA-1 或 SHA-256 或其他方式对它们进行哈希处理。

    【讨论】:

      【解决方案4】:

      这真的取决于你的实际问题。您的问题陈述非常通用,并且高度依赖于哈希表的大小。

      对于小型哈希表,您只打算在您可能更喜欢文本文件(便于调试)时读取和写入。

      如果你的哈希表小于 25meg,SQLite 可能对你很有效

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-14
        • 2019-04-13
        • 2019-06-19
        • 2013-08-04
        • 2011-05-05
        • 2010-09-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多