【问题标题】:Keep data in memory or use database将数据保存在内存中或使用数据库
【发布时间】:2019-03-04 16:09:36
【问题描述】:

假设我们有一个票务系统网页,其中显示票证(票证分布在多个页面上)。此外,在同一页面中还有一个允许过滤的搜索表单。

这些工单可以随时修改(删除、更新、插入)。

所以我有点困惑。内部架构应该怎么看?想了很久,还是没有找到清晰的路径。

在我看来有两种方式:

  1. 使用内存数据库之类的东西并将所有数据存储在那里。因此过滤内容和显示请求的项目非常容易。但是这个解决方案意味着在 ram 中存储大量无用的数据。喜欢关闭或解决的票。这些票应该在那里,因为它们可以被请求。

  2. 每次搜索、页面显示等都要使用数据库,所以会有很多查询。每次搜索、每个页面(每个用户)都会产生一个数据库查询。是不是有点过分了?

哪种解决方案更好?有没有更好的解决方案?我的担心是徒劳的吗?

【问题讨论】:

  • 如果您需要数据在一段时间内保持不变,您可以使用数据库。

标签: sql database search in-memory-database


【解决方案1】:

你说“但是这个解决方案意味着在 ram 中存储大量无用的数据。就像关闭或解决的票证一样。这些票证应该在那里,因为它们可以被请求。”

如果这些票应该在那里,因为它们可以被请求,那么它并不是真正无用的数据,是吗?

这听起来像是混合内存/持久数据库的一个很好的用例。将打开/显示的票证保存在内存表中。关闭后,将它们移动到持久表中。

【讨论】:

  • 你明白了。当我说无用时,我的意思是那些票被搜索到的概率极低。但是可以搜索它们。所以在 99,99% 的情况下,这些票只占用内存。我对类似的事情很感兴趣。但是我无法想象我应该如何实现搜索功能,因为有两个地方可以搜索。
  • 我可以设想一些选择。假设混合内存/持久数据库系统可以在同一个数据库中保存两种类型的表,然后将两个表连接起来,并在两个表的相关字段上使用“或”条件进行查询。或者,有一个单独的查询功能(和可视元素)来查询已关闭/已解决的案例。可能会给用户带来不便。或者,只需使用传统的持久数据库系统并确认缓存将完成其工作并将“热”数据保留在内存中。
  • 好的。我应该缓存哪些数据?或者我应该如何缓存数据?搜索查询是否与缓存相关?
  • WRT:或者,只需使用传统的持久数据库系统并确认缓存将完成其工作并将“热”数据保留在内存中。 DBMS 将为您执行此操作。在大多数 DBMS 中,您对缓存的唯一控制是决定将多少系统内存分配给数据库缓存。一些 DBMS 为您提供更多控制,例如预热缓存,或为某些表提供更高的优先级,以便这些表的页面不太可能被推出缓存。不过,它是非常特定于 DBMS 的。
猜你喜欢
  • 2016-11-11
  • 2012-02-28
  • 2017-06-16
  • 1970-01-01
  • 2019-01-17
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
  • 2011-10-31
相关资源
最近更新 更多