V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
eason1874
V2EX  ›  程序员

这样设计网站日志数据库 MySQL 表格,有问题吗?

  •  
  •   eason1874 · 2019-10-26 09:32:51 +08:00 · 2821 次点击
    这是一个创建于 1847 天前的主题,其中的信息可能已经有所发展或是发生改变。
    持有 1 核 1G 内存 50GB 数据盘 MySQL 数据库一台,准备用来存网站日志,每日日志~500M,大家看看这样设计表合理吗?

    引擎计划用 innodb,列名前面有星号的计划建立索引。

    请求记录(按路径、状态、时间 统计受访 PV )
    request_id | request_method | host | *request_uri | http_status | body_bytes_sent | *time_local | logpath_id

    请求来源(按域名 统计来源 PV )
    request_id | *referer_host | referer_url

    请求用户(按系统、浏览器、用户 IP 统计访问次数)
    request_id | *user_ip | system | browser | user_agent | *x_forwarded_for

    个别请求需要的自定义记录
    request_id | *meta_key | meta_value

    日志来源(日志追溯)
    logpath_id | log_path


    有必要这样分表吗?这样搞下来会不会两个月日志都存不下?
    14 条回复    2019-10-27 11:36:10 +08:00
    opengps
        1
    opengps  
       2019-10-26 09:36:22 +08:00
    看着机器配置是像是腾讯云机器。不过不管哪家云,主要看下硬盘是不是 ssd,不然将来查询会慢死的
    另外,这个 id 主键作为聚合索引的结构,会随着数据量啊增加,写入时候慢慢变得更慢
    lhx2008
        2
    lhx2008  
       2019-10-26 09:36:41 +08:00
    楼主先搞清楚 OLAP 和 OLTP 的区别,然后 ELK 了解一下
    opengps
        3
    opengps  
       2019-10-26 09:37:14 +08:00
    吹一下自己的博客 [日志表:亿级数据量的日志系统怎么设计?]( https://www.opengps.cn/Blog/View.aspx?id=470&f=v2)
    eason1874
        4
    eason1874  
    OP
       2019-10-26 09:41:08 +08:00
    @opengps #1 不是 ssd,写着“高性能云盘,IOPS:1900”。写入慢不怕,异步导入。我比较在乎读取效率(按天、按月查看统计)和数据量大小,买的时候没算,想着按年分表,买了才想起算一下发现 50G 存三个月都够呛。
    eason1874
        5
    eason1874  
    OP
       2019-10-26 09:43:24 +08:00
    @lhx2008 #2 我不懂啊,数据库方面是小白一个,但也不打算在这方面投入太多,计划在这个周末做完全部。你说的我查下资料能不能看懂,谢谢。
    lhx2008
        6
    lhx2008  
       2019-10-26 09:48:13 +08:00 via Android
    @eason1874 简单来说,就是关系数据库不适合干这个,又占资源,写入又慢,又没查询的意义。
    一般这种直接存文本日志就行了。分析的话再读取,比如简单的就直接用 linux 管道 awk uniq sort 啥的都分析出来了。如果要可视化,就用 ELK 做了。
    eason1874
        7
    eason1874  
    OP
       2019-10-26 10:04:13 +08:00
    @lhx2008 #6 我用 MySQL 的原因是。。。腾讯云 MySQL 学生机 36 一年,够便宜。平时是直接看日志文本的,但服务器硬盘不大,日志文件不压缩也放不了多少,想着这 MySQL 这么便宜,能不能拿来搞个可视化 Web 界面。

    现在没有机器装软件,我连 MySQL 查询页都计划放云函数上面。不管了,硬上 MySQL 看看什么效果,实在不能用就当踩坑好了。
    x7395759
        8
    x7395759  
       2019-10-26 10:20:14 +08:00
    摆着 ELK 不学,非要自己踩坑?这不就是懒么。
    eason1874
        9
    eason1874  
    OP
       2019-10-26 10:25:17 +08:00
    @x7395759 #8 没服务器跑 ELK 啊。我就是想偶尔用手机看一下统计,花钱买个服务器跑我觉得划不来。
    x7395759
        10
    x7395759  
       2019-10-26 10:29:52 +08:00
    @eason1874 那就没有办法了,踩坑就完事了
    aru
        11
    aru  
       2019-10-26 11:27:26 +08:00
    @eason1874
    用 percona mysql 5.7,使用行压缩,可以省非常多的空间
    建议你用一个星期的日志,对比使用压缩和不使用压缩占用的空间

    www-percona-com/doc/percona-server/LATEST/flexibility/compressed_columns.html
    eason1874
        12
    eason1874  
    OP
       2019-10-26 11:59:09 +08:00
    @aru #11 谢谢。我用的腾讯云 CDB,没有这个引擎,只能从表设计上省了。
    hushao
        13
    hushao  
       2019-10-27 11:03:43 +08:00 via iPhone
    日志的话可以用 myisam 引擎试试,另外还可以开启压缩,索引的话,不是必要可以先不建
    eason1874
        14
    eason1874  
    OP
       2019-10-27 11:36:10 +08:00
    @hushao #13 现在用了 InnoDB,我基于复用的逻辑重新设计了表格,保守估计至少能存多 10 倍记录,但数据处理多了。先跑一个星期试试,效果不行再上 MyISAM 试试。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5527 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 06:49 · PVG 14:49 · LAX 22:49 · JFK 01:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.