我想为我的应用程序构建一个非常大的LOG服务器,超过100个用户每隔一小时自动将他们的日志数据放在那里。 我决定使用MYSQL和Innodb。但我有一个问题:
在100个活跃用户的5年后,在每个请求中,每天每小时将100字节数据放入DB,我将有一个5 x 365 x 24 x 100 = 4380000行的表! 它的尺寸为5 x 365 x 24 x 100 x 100 = 417MB !!!
搜索速度怎么样?我认为它会变得太低了! 可以Mysql Handel这个吗? 如果我想查找一个用户的数据需要多长时间?
有更快的方法吗?
答案 0 :(得分:0)
我已经对我系统上的一个非常大的Innodb表(10Go,25列,12个索引,8个外键)进行了一些测试。计算整个表非常慢,但返回索引值是免费的。 无论如何,如果你不需要进行外键检查,MyISAM会比Innodb更快
MariaDB [db]> select count(1) from {table};
+----------+
| count(1) |
+----------+
| 18865472 |
+----------+
1 row in set (29.80 sec)
MariaDB [db]> select * from {table} where {indexed_field} = 108304177;
1 row in set (0.00 sec)
回答你的意见。 假设您的日志表看起来像那样。
create table if not exists logs (
id int(10),
creation_date timestamp(),
value int(3)
);
您可以安排创建聚合表,这样可以更快地请求图表用途
create table if not exists logs_aggregated (
creation_date timestamp(),
nb_logs int(3),
value_average int(3)
);
insert into logs_aggregated values
select
left(creation_date, 10) as creation_date,
count(1) as nb_logs,
avg(value) as value_average
from logs
group by left(creation_date, 10);