【发布时间】:2016-02-09 21:10:37
【问题描述】:
我有以下网站:
用户输入一些数据,服务器根据这些数据生成大量结果,这些结果需要显示给用户。我正在使用 php 计算数据,将其存储在 MySQL DB 中,并通过服务器端处理将其显示在 Datatables 中。 数据需要在有限的时间内保存 - 每隔一小时,整个表都会被删除并重新创建。
观察到的最大负载为:每天 7000 个会话/用户,一次最多 400 个用户。每小时我们在主表中插入超过 5000 万条记录。我们正在使用配备 Intel i7 和 24GB 内存、HDD 磁盘的专用服务器。
问题是当更多的人(一次> 100人)使用该站点时,MySQL无法处理负载并且MySQL+硬盘成为瓶颈。即使有几千个结果,用户也必须等待几分钟。磁盘是 HDD,目前没有放置 SSD 的选项。
问题:
用 Redis 代替 MySQL 能提高性能吗?
如何将生成的数据存储在 redis 中,以便我可以为 1 个用户检索它并按任何值对其进行排序并过滤它?
我在php中有以下数据
$user_data = array (
array("id"=>1, "session"="3124", "set"=>"set1", "int1"=>1, "int2"=>11, "int3"=>111, "int4"=>1111),
array("id"=>2, "session"="1287", "set"=>"set2", "int1"=>2, "int2"=>22, "int3"=>222, "int4"=>2222)...
)
$user_data 可以是长度从 1 到 1-2 百万的数组(我正在计算它并以 10000 的块插入数据库)
我需要在 redis 中存储至少 400 个这样的用户的数据,并且能够以 10/20 的块为分页检索特定用户的数据。我还需要能够按任何字段集(字符串)、int1、int2 ...(我有大约 22 个 int 字段)进行排序,还需要按任何整数字段进行过滤(类似于 sql WHERE 子句 9000
- redis 也可以做出类似于 SQL WHERE set LIKE '%value%' 的东西吗?
【问题讨论】:
-
没办法回答。如果您将内容存储在 ram 中,那么您将占用 ram 来保存该数据,这意味着用于其他所有内容的 ram 更少。
-
我的另一个问题是索引。表是如何编入索引的,您的查询是否利用了索引。
-
您不会像在(例如)mysql 数据库中那样将数据存储在 redis 中。 redis 是一个优秀的键值存储,而不是 mysql
-
@Marc B,服务器是专用的。只有我在使用它,所以我几乎可以使用所有 24Gb 的内存
-
@Jay Blanchard,1 varchar(6) 字段上有索引 - 会话 id 和 1 个整数 - 另一个 id。两个字段的值必须不同,最多不超过过去一小时内的用户数
标签: php mysql sorting redis phpredis