访问数据库的成本是多少?我们多久访问一次它?

How expensive is access to database? How often do we access to it?

我正准备为 Android 编写一个应用程序,它将使用 Mysql。 我知道访问数据库在时间上确实很昂贵,并且想知道即时消息、在线游戏等应用程序访问数据库的频率是多少? 例如在游戏中,我们想保存一个玩家在世界中的位置,当他一直在移动时。

数据库访问是不是真的不贵,有没有办法一直连着,只做request其实不贵?

或者 IT 真的很昂贵,并且有一些技术可以访问它,例如每隔 X 时间间隔访问它,同时将它保存在本地?

我知道我的问题很笼统,它总是取决于我们需要什么和想要什么。 我的问题出来了,因为我做了一个非常简单的登录应用程序,它连接并向数据库发出 1 个请求,并且需要 1 秒(很多!!)才能得到结果,那么在线应用程序怎么可以这么快?

谢谢

这取决于您的设计和要求。

1) 大多数应用程序管理连接池以最小化初始化时间。

2) 大多数ORM框架都有外部Cache来提高读取性能。因此,如果您在应用程序中读取大量数据,则不必担心将其存储在本地。 Cache在这种情况下才会生效。

3) 当您以文件(或)某种格式在本地存储时,它还会增加额外的性能延迟。

4) 如果将数据保存在主内存中,那么显然 Game 性能会更好。这就是 Gamers 更喜欢高端显卡和大内存的原因。

对于大多数数据库,都有批量插入的选项。显然,如果您随着时间的推移需要建立许多连接,那么即使是很小的开销也会累积起来。并且执行单次插入将比批处理有更大的开销。唯一的问题是多久一次?....并且在进行批量插入之前,您应该测试不想插入的频率以及应该在本地存储多少信息。

在回答这个问题之前,我建议尽可能多地模拟该过程,进行基准测试,然后您可以努力为您的用例找到最佳解决方案。

例如如果我有一个向数据库提交数据的应用程序模拟提交,那么我可以轻松地同时 运行 多个提交并查看瓶颈是什么......并查看它与我使用缓存,复制时的比较,指标等

阅读公司博客也很有帮助,因为他们经常分享 success stories 支持特定方法的使用

访问数据库的费用是多少?

访问数据库可以是一个非常快速的操作

SELECT 1;    // 0.005 Secs :D

然而,有些情况会导致性能不佳(读取、写入和更新缓慢),但有一些相对简单的方法可以解决这个问题

The best way to improve the performance of SELECT operations is to create indexes on one or more of the columns that are tested in the query. The index entries act like pointers to the table rows, allowing the query to quickly determine which rows match a condition in the WHERE clause, and retrieve the other column values for those rows.

spreading the load among multiple slaves to improve performance. In this environment, all writes and updates must take place on the master server. Reads, however, may take place on one or more slaves. This model can improve the performance of writes (since the master is dedicated to updates), while dramatically increasing read speed across an increasing number of slaves.

我们多久访问一次它?

如果您单独使用数据库,您将在每次找到位置和每次需要找出他们的位置时访问它。

您可以在此处探索防止访问数据库的选项。

  1. redis 或 memcache 等内存缓存
  2. 复制 - 仅从从属读取