我即将为Android编写应用程序,它将使用Mysql。 我知道对数据库的访问在时间上确实很昂贵,并且想知道应用程序如即时消息,在线游戏访问数据库的频率如何? 例如,在游戏中,当他一直在移动时,我们希望保存玩家在世界中的位置。
数据库访问实际上是不是很昂贵,并且有一种方法可以一直连接到它并只是做一些实际上并不昂贵的请求吗?
或者IT无论如何都非常昂贵,并且有一些技术可以访问它,例如每X个时间间隔,并在此期间将其保存在本地?
我知道我的问题非常普遍,而且总是取决于我们需要和想要的东西。 我的问题出来是因为我制作了一个非常简单的登录应用程序,连接并向数据库发出1个请求,并且需要1秒钟(很多!!)来获得结果,那么在线应用程序如何如此之快?
谢谢
答案 0 :(得分:2)
在回答这个问题之前,我建议您尽可能模拟流程,进行基准测试,然后为您的用例寻找最佳解决方案。
e.g。如果我有一个应用程序向数据库提交数据模拟提交,那么我可以轻松地同时运行多个提交,看看瓶颈是什么......并看看当我使用缓存,复制,索引等时它是如何比较的。
阅读公司博客也很有帮助,因为他们经常共享支持使用特定方法的success stories
访问数据库可以是一个非常快速的操作
SELECT 1; // 0.005 Secs :D
然而,有些情况会导致性能不佳(读取,写入和更新速度慢),但有一些相对简单的方法可以解决这个问题
提高SELECT操作性能的最佳方法是 在一个或多个在中测试的列上创建索引 查询。索引条目就像指向表行的指针一样,允许 查询以快速确定哪些行匹配条件 WHERE子句,并检索这些行的其他列值。
在多个从站之间分配负载以提高性能。在 在此环境中,所有写入和更新都必须在主服务器上进行 服务器。但是,读取可能发生在一个或多个从站上。这个 model可以提高写入的性能(因为master是 致力于更新),同时显着提高读取速度 越来越多的奴隶。
如果您完全使用数据库,您将在每次定位时以及每次需要查找其位置时访问它。
您可以在此处探索阻止访问数据库的选项。
答案 1 :(得分:1)
这取决于您的设计和要求。
1)大多数应用程序管理连接池以最小化初始化时间。
2)大多数ORM框架都有外部Cache来提高读取性能。因此,如果您在应用程序中执行大量数据读取,则不必担心将其存储在本地。在这种情况下,缓存将有效。
3)当您以文件(或)格式存储本地时,它还会增加额外的性能延迟。
4)如果将数据保存在主存储器中,那么显然Game
性能会更好。这就是Gamers
更喜欢高端显卡和巨大内存的原因。
答案 2 :(得分:1)
对于大多数数据库,可以选择批量插入。显然,如果随着时间的推移需要很多连接,即使很小的开销也会累积。执行单个插入将比批处理具有更大的开销。唯一的问题是频率如何?....在进行批量插入之前,你应该测试你不想插入的频率以及你应该在本地存储多少信息。