是否应该将数据库中的所有数据映射到模型



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

在文件models/account.go中,我有一个structAccount,在MongoDB中,我还有一个集合account,用于保存网站的所有帐户信息。我应该创建Accountlist来将所有数据存储在数据库中以提高性能吗?。

来源如下:

var AccountList map[int]*Account
type Account struct {
ID       int
UserName string
Password string
Email    string
Role     string
}

与软件中的许多东西一样;这取决于";。

关于所涉及的系统、数据被查询、变异的频率等,没有足够的信息来给出具体的答案。但因为这是家庭作业,我们可以给出场景。

问题的根源在于:是否应该缓存数据库中的结果?

真的需要吗

从学术角度来说,过度优化是可以的。你可以玩技术,了解它们是如何工作的。在现实世界中,我们应该在实现某个东西之前了解它的需求。解决方案越复杂,做出正确的权衡就越重要。

当您要更频繁地使用结果而不是更改结果时,缓存是最好的,而且从存储中获取数据的成本很高。

"昂贵的";可以变化。以秒为单位的一次操作可能很昂贵。但以100毫秒为单位的数十次、数百次或数千次手术也可能如此。

你应该怎么做

你指出了几个缺点。最重要的是:

但这里的大问题是同步MongoDB和我创建的字典中的数据。

同步对于任何分布式系统来说都是最重要的。

如果您有一个服务器实例,那么如何缓存值并不重要。但一旦开始添加实例,事情就会变得复杂起来。

缓存的一种常见模式是使用分布式键值存储。它们允许您存储可以在应用程序之间共享的结果,并使其无效。

  • 应用程序检查存储中是否存在密钥
  • 如果是,请使用它
  • 如果没有,则从原点提取并为下次更新缓存
  • 另外,在数据需要更新的任何时候,都要使密钥无效

有很多产品可以使用。Redis很流行,memcached很管用。但由于您使用Go,请签出groupcache:https://github.com/mailgun/groupcache.它由Google编写以简化dl.google.com,并由Mailgun扩展以支持TTL。

最新更新