› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
hoythan
V2EX  ›  MySQL

统计每个用户的每个文章的阅读数和时间,如何设计数据表比较合适?通过 mysql

  •  
  •   hoythan · Mar 20, 2019 · 5341 views
    This topic created in 2755 days ago, the information mentioned may be changed or developed.
    5 replies  •  2019-03-25 09:22:00 +08:00
    Andata
        1
    Andata  
       Mar 20, 2019
    Emmm,序号,文章 id,用户名,开始时间,结束时间 这样子吧
    hoythan
        2
    hoythan  
    OP
       Mar 20, 2019
    @Andata 一千个用户阅读一千个文章就有 100 万条记录,我担心这样设计会不会造成性能问题。
    baojiweicn2
        3
    baojiweicn2  
       Mar 20, 2019 via Android
    elk 不就可以了,明天定时脚本拉一下数据。如果是实时的话,数据允许可丢的风险的话,数据缓存一下,周期性入库就成,查询也是,热点查询放到缓存。
    Andata
        4
    Andata  
       Mar 20, 2019
    @hoythan 看你要怎么用,如果是生产要插入数据,怕数据太多影响性能的话,可以定时归档数据,几天归档一份这样子。
    cs8814336
        5
    cs8814336  
       Mar 25, 2019
    可以采用 hash(id) 进行分表或者分区, 分区的话开发容易. 这样尽管 1000 个用户 1000 个文章 100w 条还可以实现.

    假如你单纯只是用来统计总阅读数和总时间,是否可以加上通过定时脚本定时合并数据库的数据, 例如你 mysql:
    创建时间 文章 id 用户 id 阅读数 阅读时间
    18 号 1 2 1 2m
    19 号 2 2 1 7m
    20 号 3 2 1 6m

    定时脚本 20 号合并后产生汇总数据:
    创建时间 文章 id 用户 id 阅读数 阅读时间
    20 号 -1 2 3 15m
    21 号 5 2 1 30m


    这样类似定时清理旧数据. 类似 elasticsearch 之类的数据库都有隐藏后台合并数据的操作,elasticsearch 的是每个 index segement 是不可变的,然后会有很多,后台进程会自动错峰合并. 或者说是 lsm tree?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   767 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:50 · PVG 03:50 · LAX 12:50 · JFK 15:50
    ♥ Do have faith in what you're doing.