【问题标题】:using two separate keys in BoltDB在 BoltDB 中使用两个单独的键
【发布时间】:2016-03-20 08:35:49
【问题描述】:

我有一个带有IDLoginName 字段的User 结构,我希望这些字段中的任何一个都可以通过对数据库的一次调用来访问这个结构。我知道 BoltDB 不应该处理任意字段索引等(与 SQL 不同),但这种情况有点不同,因为我事先知道 b 用作索引的附加字段。

那么是否有某种辅助键或多键索引?或者可能是我看不到的一些策略?如果没有,那么我将通过两次调用来实现它,我只是更喜欢“更清洁”的解决方案......

谢谢!

【问题讨论】:

  • 这似乎是 SQLite 的完美用例; BoltDB 很棒,但您必须跳过一些(容易出错的)障碍才能使其正常工作。

标签: go boltdb


【解决方案1】:

不,它不存在。 BoltDB 很像 Go。干净简单。在上面构建一个层很容易。 BoltDB 甚至允许简单地实现更新事务,因此可以原子地更新或不更新另外两个存储桶。因此,创建一个使两个或多个存储桶保持同步的更新事务很容易。但听起来你知道这一点,只是想检查一下你没有遗漏什么。

【讨论】:

  • 是的。这就是我所做的
【解决方案2】:

BoltDB 中没有二级键索引,但你可以实现它。

您可以将 ID 到 LoginName 映射存储在另一个存储桶中,从技术上讲,它将是您的结构的“辅助键”。即先从辅键中获取主键值,再从User结构体中获取。

如果您的大部分呼叫都在 LoginName 键上,请使用 LoginName 到 ID 的映射并将 User 结构存储在 LoginName 键下,反之亦然。

小心:你必须自己保持一致性,记住这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    相关资源
    最近更新 更多