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

类似微博、朋友圈这样的帖子类数据库怎么设计?

  •  
  •   SnowFlower · 2020-03-18 10:46:30 +08:00 · 5966 次点击
    这是一个创建于 1746 天前的主题,其中的信息可能已经有所发展或是发生改变。

    类似微博、朋友圈的文字+图片的短文,这种需求的数据库是用 MySQL 吗,文章内容文字+图片怎么设计存储比较合适?

    26 条回复    2020-03-26 21:58:49 +08:00
    Tn5ohB1Yecdk3qCK
        1
    Tn5ohB1Yecdk3qCK  
       2020-03-18 10:56:01 +08:00
    感觉 mongodb 这种文档数据库会好点
    cgpiao
        2
    cgpiao  
       2020-03-18 11:08:39 +08:00
    图片不都是 ObjectStore 然后数据库里插入对应的 Key 吗,貌似跟数据库类型没啥关联吧。
    qiayue
        3
    qiayue  
       2020-03-18 11:09:24 +08:00   ❤️ 1
    楼上别瞎说,图片、视频等原始文件绝对不能存数据里里,所以其实关系数据库足够。
    如果是图文混排,可以先这样
    文字文字文字[img]path/name.jpg[/img]文字文字[video]path/name.mp4[/video]文字文字

    如果类似微博、朋友圈,用不同字段存储就行,文字存文字自动,图片、视频存路径
    qiayue
        4
    qiayue  
       2020-03-18 11:09:45 +08:00
    @qiayue 更正,1 楼别瞎说
    tyrantZhao
        5
    tyrantZhao  
       2020-03-18 11:11:38 +08:00
    图片视频绝对不能存 db
    opengps
        6
    opengps  
       2020-03-18 11:13:56 +08:00
    123 楼都没错,文件使用第三方对象存储已经是行业常用做法,
    数据库基本只是文本类信息
    微博朋友圈这种时间线性质应用,“分页”不适合,但不能因此排除关系型数据库,使用关系型可以按照指定起点拉取指定行结果的方式。也可以直接使用非关系型的,例如时序数据库存短篇幅信息,长篇幅则把内容单独拆出来存储
    psychoo
        7
    psychoo  
       2020-03-18 11:29:45 +08:00
    图片、视频存路径
    gz911122
        8
    gz911122  
       2020-03-18 11:34:54 +08:00
    学习一下,一直想知道这种表结构的最佳实践是啥
    zhengjian
        9
    zhengjian  
       2020-03-18 11:36:26 +08:00
    我也比较好奇怎么存储顺序图片

    https://www.v2ex.com/t/560631
    Dabaicong
        10
    Dabaicong  
       2020-03-18 11:45:12 +08:00
    23 楼说的对,原始文件存对象存储,比如阿里云的 oss。
    数据库中存放对应的存储路径就行

    另外,全文检索在内容查询上会比较好
    LudwigWS
        11
    LudwigWS  
       2020-03-18 11:53:46 +08:00
    我很好奇为什么能时间线、推送能做得相应这么快。
    lhx2008
        12
    lhx2008  
       2020-03-18 12:03:26 +08:00 via Android
    大概率还是用关系数据
    Tn5ohB1Yecdk3qCK
        13
    Tn5ohB1Yecdk3qCK  
       2020-03-18 12:05:01 +08:00
    @qiayue #4
    我瞎说?谁会把图片视屏丢数据库??
    justfortest
        14
    justfortest  
       2020-03-18 12:09:48 +08:00 via Android   ❤️ 1
    @LudwigWS 消息队列,预处理将要推送的时间线消息 id 放到 redis,从 redis 拉取,过于久远历史消息有必要时再从 db 取,区分活跃不活跃,是否大 v 采取不同的 push/pull 方式
    aut0man
        15
    aut0man  
       2020-03-18 12:12:49 +08:00
    为什么我接触的从来都是 db 存路径…难道可以直接把图片视频存 db ??@@ 谁能科普一哈(那啥我是个产品)
    areless
        16
    areless  
       2020-03-18 12:23:34 +08:00 via Android
    mysql 做不到的,当时就因为这个造出来那么多 nosql 数据库。关注十万人去 mysql 里捞一个你关注的 timeline 试试。对于普通用户,被关注对象发言直接存进每一个普通用户 timeline 里面~对于 1 万粉以上又另外处理。
    iConnect
        17
    iConnect  
       2020-03-18 12:27:57 +08:00 via Android
    微博和普通 blog 的存储方式并没有本质不同; newsfeed 的推送是推拉结合的方式,活跃用户先推,僵尸用户等自己登录后来拉。
    ooToo
        18
    ooToo  
       2020-03-18 14:37:51 +08:00
    图片视频是 s3, HDFS 这种, 剩余的就是存 db, 按照需要 nosql or sql
    Jooooooooo
        19
    Jooooooooo  
       2020-03-18 14:40:32 +08:00
    图片视频肯定是 s3 啊, 要不然同一张图片别人发好多次得存好多次, 肯定是存个 id
    wangyzj
        20
    wangyzj  
       2020-03-18 23:25:00 +08:00
    redis + mysql + hbase
    够你玩了
    0x663
        21
    0x663  
       2020-03-20 09:01:52 +08:00
    @tyrantZhao 为什么图片视频绝对不能存 db?
    tyrantZhao
        22
    tyrantZhao  
       2020-03-26 07:05:54 +08:00   ❤️ 1
    @liushaokang 一般都是存路径的,因为视频或者图片太大了,非常容易挤占不多的内存和磁盘空间
    thinkmore
        23
    thinkmore  
       2020-03-26 09:45:17 +08:00
    ```
    {

    _id: 1,

    content: "<p>你好呀</p> <img src='https://server.com/1.png'>点这里</img>"

    }

    ```
    0x663
        24
    0x663  
       2020-03-26 14:20:37 +08:00
    @tyrantZhao 那这些图片和视频资源上传到哪里,他们又是如何存储的?
    tyrantZhao
        25
    tyrantZhao  
       2020-03-26 16:32:14 +08:00
    @liushaokang 这个一般都是放到指定目录下
    hsddszjs
        26
    hsddszjs  
       2020-03-26 21:58:49 +08:00 via iPhone
    apache cassandra
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2646 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:56 · PVG 19:56 · LAX 03:56 · JFK 06:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.