为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
米脂 2023-02-28 20:31:54
我正在使用 Go 和 MongoDB 在 restAPI 上做作业。但我仍然想知道:至于我是否应该创建一个字典来存储模型级别的数据,这将帮助我在不访问 MongoDB 的情况下更快地检索数据。但是这里最大的问题是同步MongoDB下的数据和我创建的字典里的数据。在文件 models/account.go 中我有一个 struct Account ,在 MongoDB 中我也有一个 collection Account 来保存网站的所有账户信息。我应该创建 Accountlist 来存储数据库中的所有数据以提高性能吗?来源如下:var AccountList map[int]*Accounttype Account struct {    ID       int    UserName string    Password string    Email    string    Role     string}
查看完整描述

1 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

与软件中的许多事情一样,“视情况而定”。

关于所涉及的系统、数据被查询、修改的频率等方面的信息不足,无法给出具体的答案。但是因为这是作业,我们可以给出场景。

你的问题的根源是:你应该缓存数据库中的结果吗?

真的需要吗?

在学术上,过度优化是可以的。您可以使用技术并了解它们的工作原理。在现实世界中,我们应该在实施之前了解对某些东西的需求在哪里。解决方案越复杂,做出正确的权衡就变得越重要。

当您要更频繁地使用结果而不是更改结果时,缓存是最好的,并且从存储中获取是昂贵的。

“昂贵”可能会有所不同。以秒为单位的一项操作可能代价高昂。但以 100 毫秒为单位测量的数十、数百或数千个操作也可以如此。

你应该怎么做?

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

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

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

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

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

  • 应用程序检查存储中是否存在密钥。

  • 如果是这样,请使用它。

  • 如果不是,则从源中获取并为下次更新缓存。

  • 另外,在数据需要更新时使密钥无效。

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


查看完整回答
反对 回复 2023-02-28
  • 1 回答
  • 0 关注
  • 68 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信