Ram 或 DB 表中的表,以获得最佳性能

Posted

技术标签:

【中文标题】Ram 或 DB 表中的表,以获得最佳性能【英文标题】:tables in Ram or DB tables, for best performances 【发布时间】:2016-08-16 04:27:32 【问题描述】:

我正在使用 java 编写服务器应用程序(聊天服务器端),它接收请求并发送到目标。

    我在数据库中有几个表,服务器 应用程序启动时,我对其进行了编程以复制 数据库映射表(在内存中),以加快拉动 在应用程序运行时推送数据。 这种剂量正确吗?或者您建议我在需要详细信息时直接从数据库中提取数据。并删除地图 公羊的桌子!? 我遇到了内存泄漏。 处理数据库会减慢应用程序的速度吗?

【问题讨论】:

如果将所有数据都放在内存中,应用程序将无法针对大量用户进行扩展。您能否更具体地说明您的应用程序。应用程序需要支持哪些功能?有多少用户?您期望有多少数据? ... thanks @skyWalker.... 它是基于 xmpp 的聊天服务器,我添加了许多附加功能,现在用户数为 300,消息有效负载是带有 12 个字符串字段的 map .应用程序读取消息类型(自定义字段)并按类型(20 种类型)处理它并传递给目标...更新:开始时的内存状态:总内存 ... 21,457,403,904 空闲内存 ... 21,398,745,256 最大内存 .. . 32,194,822,144 【参考方案1】:

在内存中缓存全部或部分数据是否有意义取决于您的用例。它可以提高性能,但会增加可能不需要的复杂性。

您可以将数百万甚至数十亿条记录加载到 JVM 中,但除此之外,您还需要一个堆外存储,例如用于此目的的数据存储或数据库。使用堆外内存,您可以在 JVM 中拥有数万亿条记录,但这很少需要。

【讨论】:

我这样做并处理数据中的每一个修改:在每次更改中修改数据库和表.. --- 我这样做是因为我相信从 RAM 中提取数据比从数据库中提取数据更快----。这是真的吗? @EsmaeelQash RAM 会更快,前提是您有适当的索引并加载了所需的所有数据。

以上是关于Ram 或 DB 表中的表,以获得最佳性能的主要内容,如果未能解决你的问题,请参考以下文章

SparkSQL 中的表连接顺序以获得更好的性能

Django South:结合“alter table”以获得更好的性能?

如何优化 1Gb 大小 250k+ 行的 Mysql 表以获得更好的性能

以在 Oracle 和 SQL Server 中获得最佳性能为目标的数据建模

在 Postgres 中,如何匹配多个“标签”以获得最佳性能?

处理大型数据库时如何获得最佳性能?