【发布时间】:2018-10-02 21:37:28
【问题描述】:
我有以下结构:
type Post struct {
Id int
Name string
Text string
Posts []Post
}
要添加一些数据,我执行以下操作:
var posts []Post
posts = append(posts, Post{Id: 0, Name: "a", Text: "b"})
posts[0].Posts = append(posts[0].Posts, Post{Id: 1, Name: "c", Text: "d"})
posts = append(posts, Post{Id: 2, Name: "e", Text: "f"})
posts[0].Posts = append(posts[0].Posts, Post{Id: 3, Name: "h", Text: "d"})
如何有效地将这个结构树存储在磁盘上?我正在寻找可以在没有服务器的情况下使用的东西(比如 SQLite)。我希望能够搜索Id 2 或3,分别返回带有Id 2 或3 的整个结构。另外,我希望能够更新单个结构 f.e. Id 2.
另外,用Id作为地图的key,使用地图会更好吗?
【问题讨论】:
-
推荐的解决方案可能取决于问题中未提及的因素,例如您打算存储多少个这些结构,是否可以将它们读入内存,字符串长度和树的深度是否有任何限制?
-
@icza 这些因素与我的用例并不真正相关,但我想要一个能够存储 10 个但也能存储 100k 个结构的有效解决方案。字符串可以是有限的(1024 个字符),但它应该是可配置的。这同样适用于树的深度,在我的用例中,最大深度为 10 就是一个很好的例子。
-
@icza 经过一些思考后,我注意到看看根据这些因素存在哪些类型的不同解决方案会很有趣。
-
好吧,当您需要一个没有数据库服务器的数据库时,SQLite 是一个不错的选择。这可能是对一组记录进行原子更新的最简单方法。如果您想避免手动编写 SQL,也可以使用 Gorm 关系管理器。