- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一堆移动应用程序将数据发送到 mysql 服务器。每个应用程序都有自己的表,并且可以在短短几周内轻松达到 100,000 多条记录。目前我每天大约有 1000 万次对数据库的调用。我的系统当前设置的方式是每 5 分钟一个 cron 将对每个表运行一堆查询并将 html 缓存到文件中。然后,当用户调用排行榜时,我运行 1 个查询来获取他们当前的排名,然后显示缓存的 html 以及从查询中提取的排名。
虽然这有效,但我希望改变这一点有两个主要原因。我想在客户端而不是我的服务器上提供排行榜。我想发送 json 然后在他们的设备上解析它。另外,我想为每个应用程序添加每日、每周、每月和所有时间的排行榜。目前我存储数据的方式不允许这样做。
我的问题是
将 json 发送给用户的最佳方式是什么?像我在文件中处理 html 一样缓存 json 然后让用户调用该文件是否明智?唯一的提示是我需要为每个应用程序创建 4 个 json 文件(每日、每周、每月、所有时间)。
如果想要添加每日、每周、每月和所有时间的分数,数据库结构会是什么样子?我已经将每日分数添加到我的一些应用程序中,但我停止这样做了,因为这似乎是一种糟糕的做法。我基本上保留了所有用户的一个大列表以及他们开始新的一天的内容,每次他们更新分数时,我都会将其与他们存储的分数进行比较并得出差异。对于每天来说,该表很快就变得非常大,如果我有每周和每月,那么它很容易就会有数百万条记录。
我的每个应用程序的表结构确实非常简单
CREATE TABLE `app_test1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`deviceID` varchar(50) NOT NULL,
`username` varchar(25) NOT NULL,
`score` int(11) unsigned NOT NULL
PRIMARY KEY (`id`),
UNIQUE KEY `deviceID_2` (`deviceID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
通常我只会进行更改并根据我认为合适的方式调整它们,但是通过如此多的调用,我发现很多次简单的小更改很容易使服务器崩溃,所以现在我喜欢在我之前获得想法甚至尝试任何事情。
最佳答案
1) 不管最好的方法是缓存 JSON 文件,它确实具有与 HTML 中缓存的数据保持一致的好处。生成 JSON 可能会重用您在 HTML 中使用的相同代码 (d),因此在某种程度上,您的工作量会减少。
2) 这部分很简单,至少乍一看是这样:为您为用户注册的每个分数添加时间戳。 确保添加包含时间戳的索引(或更多):您将根据时间执行大量数据操作。
另一种可能性是为每日、每周、每月和历史分数创建新的表格。缺点是,这会增加服务器端代码的复杂性,而且坦率地说,这有点令人厌恶……但是,您只需要在特定的表上查询相关的高分即可。因此,如果您保留 50 个最高分数,那么这些表中只会有 50 x 您的应用数量
行。当用户注册新分数时,您检查它是否高于 50 个每日分数中的最低分数:在这种情况下,将其插入表中并删除最低分数。如果它击败了每日得分,请对照每周得分进行检查,如果它击败了每周得分,请对照每月得分进行检查,依此类推。当您插入新的高分时,重新创建缓存的高分文件(HTML 或 JSON)。运行 cron 来在一天结束时清理每日表等。对这些表的读取和写入将比全表搜索更快。
只是给你一些想法,希望我的想法有意义。
编辑:我忘记了另一种可能性,即在不同的服务器之间分割数据。例如,在服务器 1 上拥有游戏 A、B 和 C 的数据,在服务器 2 上拥有游戏 D、E、F 和 G 的数据。这将使您能够更均匀地处理负载。这需要一些调整(您不希望一个服务器接收 80% 的流量,而另一个服务器只获得剩余的 20%),但这是一个很容易实现的解决方案,因为所有游戏似乎都使用相同的架构;缺点是维护两台服务器显然会更昂贵。
关于使用频繁的Mysql排行榜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28567840/
我的数据库中有 2 个表,如下所示: 下面是团队表: id tname poule 1 ZF Eger heren1A 2 Pro Recco he
这期看标题已经能猜到了,主要讲的是成绩排行功能,还有对应的文件读写。那么废话不多说,让我们有请今天的主角...的设计稿: 那么主角是何方神圣呢?当然是图中的大框框—
我正在尝试在我的应用程序中实现 GameCenter。这是为了向我显示 GameCenter LeaderBoard,但它向我显示:没有项目。 -(IBAction) ShowLeader{ GKGa
这个问题在这里已经有了答案: MySQL - Get row number on select (6 个答案) 关闭 9 年前。 我有一个包含以下数据的表 USER_ID | REVENUE 1
我有一个排行榜,我想给每一行一个排名,代表他们有多少分。这是我到目前为止的代码。它工作正常,但是当两个玩家拥有相同数量的点数时,排名相同,例如,如果 DB 中有 2/2 的玩家都拥有 100 点,则他
我正在为即将到来的世界杯做一个小项目。我正在建立一个基于国家队小组的名册/排行榜/记分牌。我们的想法是获得有关小组内或淘汰赛阶段所有即将到来的比赛的信息(比分、比赛时间、比赛统计数据等)。目前我被数据
如何设置工具提示显示在所有元素之上?我需要分配坐标,以便工具提示不会关闭图表,但顶部 block 会关闭工具提示。 http://joxi.ru/L21PnlgTRPVxEm http://joxi.
我用 C# 创建了一个简单的排行榜应用程序。但是我注意到拉动和排序分数的问题。假设我在一个排序集 (95、12、60、50、66) 上运行 ZREVRANGE,然后它将按 95、66、60、50、12
我已经为我的应用设置了 google play 游戏服务并添加了排行榜。我在代码中添加了游戏 ID 和排行榜 ID。现在应用程序和游戏都已发布。 用于启动排行榜的代码 if(mclient.isCo
我目前有一些代码可以检测您在特定秒数内可以点击多少次 react 。 我正在尝试为每个人制作一个排行榜,以最高 CPS(每秒点击次数)保存前 10 名。否则代码工作完美,但我被困在排行榜上。 这是我的
当前是否有办法从网络读取 GameCenter 排行榜数据? 我正在寻找一种只读方式来在配套网站上显示排行榜。我不需要发布分数或以其他方式操作设备上的排行榜。 我感觉答案是否定的,我需要使用 Open
我正在尝试使用该按钮来拉出单个 View Gamecenter 排行榜,但无法真正弄清楚如何。我尝试了苹果论坛,但没有帮助,所以我来到了这里。帮助表示赞赏 最佳答案 将呈现 GKGameCenterV
我有一个包含以下列的表格: +----+--------+-----+------+-------+-------+-------+ | Id | Member | End | Done | Righ
我正在尝试用 MySQL 数据制作一个排行榜。 MySQL数据来自minecraft服务器上的插件。因此,我将插件的数据链接到名为 iConomy 的 MySQL 数据库 在数据库中我制作了 2 个
我有一些代码,可以计算用户在排行榜上的分数和位置,然后根据他们的分数/分数按降序显示它们。 现在我已经完成了编号,所以它看起来像这样 1 2 2 3 3 3 4 但是我想让这个更正确并根据之前的数字跳
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 7 年前。 Improve this qu
我对 Couchbase 数据库非常陌生,并且需要在我们的项目中构建排行榜解决方案。理想情况下,它应该像内存排序集一样工作:添加的每个项目为 O(log(N)),O(log(N)+M),其中 N 是排
我目前正在开发这个应用程序,用于跟踪每日运行并显示排行榜。这是针对一个类的,所以我不一定要寻找代码,只是关于如何进行的一些想法。无论如何,应用程序当前将获取输入信息(从底部文本字段),创建 RaceE
现在我以这种方式显示 SwarmConnect 在线排行榜: public void showLeaderboard() { SwarmLeaderboard.showLeaderboard(
是否可以轻松实现并使用 Javascript 完成,我不确定但是.. 如下面的代码所示,我有 5 个玩家,每个玩家的分数都不同。我正在寻找代码,以便它会根据玩家的分数自动重新列出玩家。理想情况下,如果
我是一名优秀的程序员,十分优秀!