【问题标题】:Keep several Lua tables in a small database?在一个小型数据库中保留几个 Lua 表?
【发布时间】:2016-04-03 15:58:58
【问题描述】:

我正在编写一个小型独立 Lua 工具,它使用树中的多个键/值对作为数据存储。我的原型使用 Lua 表,它们非常适合我的任务。然而,表条目不断变化和增长。对我来说,这似乎是将所有数据存储在数据库中的一个很好的理由。

许多小型工具依赖于 SQLite 数据库,但我认为如果想要存储中小型 Lua 表,必须有更好的(键值)解决方案。我读过关于使用 SQL 存储树的文章,但乍一看看起来很复杂。

是否有一种KISS 解决方案用于在数据库中存储和检索 Lua 表,可能与查询语言一起使用?

数据库仍然很小,应该是持久的,不需要处理并行查询。性能也没有问题,该工具仅供单用户使用。我更喜欢基于磁盘/文件的数据库。理想情况下,数据库的更新(查询/脚本)应受版本控制。

首先,我将 (G)dbm 视为可能的候选对象(请参阅 here),但我不知道一种简单且“可编写脚本”的方式来修改和创建新条目(就像使用 SQL 语句一样) .

我想避免像 MongoDB 这样的成熟/基于服务器的解决方案或像 Neo4j 这样的图形数据库,它们对于我手头的任务来说太过分了。

【问题讨论】:

  • 对于性能不是问题的“中小型 Lua 表”,为什么不序列化为 JSON 等标准格式呢?一个数据库可能是矫枉过正。
  • @ColonelThirtyTwo 好的,但在这种情况下,我会将数据保留在仅包含 Lua 表的 lua 文件中。仅存储数据时,JSON 与 Lua 表不是 1:1 可比吗?
  • 即使您似乎避免使用它,我还是会使用 SQLite3 方法。它非常简单、快速、可扩展、使用强大的 SQL(包括递归查询——适用于树结构)、提供 ACID 数据库,并减轻您的主内存的负担,从而避免保存大型数据集。
  • @tonypdmtr 你在 SQL 中推荐什么,我找到了邻接列表、嵌套集、闭包表等解决方案……还有什么?

标签: sql database sqlite lua dbm


【解决方案1】:

我的 lgdbm 绑定包含 gdbm 数据库的表代理。换句话说,您可以通过在 Lua 表中读取和写入条目来与 gdbm 数据库进行交互。

为简单起见,lgdbm 仅适用于字符串键和值,但可以根据需要对其进行修改以处理其他类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 2011-12-10
    • 2014-04-24
    • 2021-01-28
    • 2014-03-03
    相关资源
    最近更新 更多