数据库中的所有数据都应该映射到模型吗?

我正在使用 Go 和 MongoDB 在 restAPI 上做作业。但我仍然想知道:至于我是否应该创建一个字典来存储模型级别的数据,这将帮助我在不访问 MongoDB 的情况下更快地检索数据。但是这里最大的问题是同步MongoDB下的数据和我创建的字典里的数据。


在文件 models/account.go 中我有一个 struct Account ,在 MongoDB 中我也有一个 collection Account 来保存网站的所有账户信息。我应该创建 Accountlist 来存储数据库中的所有数据以提高性能吗?


来源如下:


var AccountList map[int]*Account


type Account struct {

    ID       int

    UserName string

    Password string

    Email    string

    Role     string

}


米脂
浏览 69回答 1
1回答

繁华开满天机

与软件中的许多事情一样,“视情况而定”。关于所涉及的系统、数据被查询、修改的频率等方面的信息不足,无法给出具体的答案。但是因为这是作业,我们可以给出场景。你的问题的根源是:你应该缓存数据库中的结果吗?真的需要吗?在学术上,过度优化是可以的。您可以使用技术并了解它们的工作原理。在现实世界中,我们应该在实施之前了解对某些东西的需求在哪里。解决方案越复杂,做出正确的权衡就变得越重要。当您要更频繁地使用结果而不是更改结果时,缓存是最好的,并且从存储中获取是昂贵的。“昂贵”可能会有所不同。以秒为单位的一项操作可能代价高昂。但以 100 毫秒为单位测量的数十、数百或数千个操作也可以如此。你应该怎么做?你指出了几个缺点。最重要的是:但是这里最大的问题是同步MongoDB下的数据和我创建的字典里的数据。同步对于任何分布式系统来说都是最重要的事情。如果您只有一个服务器实例,那么您如何缓存值并不重要。但是一旦开始添加实例,事情就会变得复杂。一种常见的缓存模式是使用分布式键值存储。它们允许您存储可以在应用程序之间共享的结果——并使它们无效。应用程序检查存储中是否存在密钥。如果是这样,请使用它。如果不是,则从源中获取并为下次更新缓存。另外,在数据需要更新时使密钥无效。有很多产品可供使用。Redis 很流行,memcached 很管用。但由于您使用的是 Go,请查看groupcache:https://github.com/mailgun/groupcache。它由 Google 编写以简化dl.google.com,并由 Mailgun 扩展以支持 TTL。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go