bfbd
V2EX  ›  问与答

有没有这样一种数据库? 历史数据自动按文件分块,可以随意拷贝删除。

  •  
  •   bfbd · Mar 14, 2018 · 2747 views
    This topic created in 3014 days ago, the information mentioned may be changed or developed.

    例如,创建数据表的时候指定一个时间戳的列,和一个文件存储路径,该表内的数据自动按日期区间存成多个物理文件。

    关键是,这些物理文件可以随意删除,还原而不影响上层的查询统计,有数据就查,没数据就跳过。

    这样,就可以使用物理文件迁移的方式随意备份和删除历史数据,需要查询它的时候把文件拷贝回来就可以了。

    Supplement 1  ·  Mar 15, 2018
    折衷的解决办法:

    分表写入数据,data_2016, data_2017, data_2018, ...

    备份时直接拷贝 mysql 文件,data_2016.frm, data_2016.idb

    然后可以删除 data_2016 中的全部数据,delete * from data_2016

    恢复时需要停止 mysql 数据库,将 data_2016.frm, data_2016.idb 覆盖回来。
    Supplement 2  ·  Mar 15, 2018
    查询比较简单,做个视图 union data_2016, data_2017, data_2018 几个表即可。
    16 replies    2018-03-15 16:43:48 +08:00
    edsion996
        1
    edsion996  
       Mar 14, 2018 via iPhone   ❤️ 1
    试试分库分表?
    loading
        2
    loading  
       Mar 14, 2018 via iPhone
    程序内部分表,底层用 swlite,简单啊。
    loading
        3
    loading  
       Mar 14, 2018 via iPhone
    sqlite
    hcymk2
        4
    hcymk2  
       Mar 15, 2018   ❤️ 1
    MySQL Partition 有类似的功能,但不是通过物理文件来实现的。
    enzo113
        5
    enzo113  
       Mar 15, 2018   ❤️ 1
    hive 的 外部表+partition 可以,但是 hive 未必是你想要的那种数据库
    bfbd
        6
    bfbd  
    OP
       Mar 15, 2018
    @loading 程序内部分表,查询的时候就得自行拼接查询结果,如果是排序后分页,SQL 语句一句搞定( limit, offset ),程序就得自己拼接来自多个表的查询结果。
    bfbd
        7
    bfbd  
    OP
       Mar 15, 2018
    @zjb861107 分库分表解决的是读写性能问题,现在是想实现非全库全表的备份、删除、以及恢复,而且是在数据量比较大的时候,比如几十,几百 G。
    bfbd
        8
    bfbd  
    OP
       Mar 15, 2018
    @zjb861107 或许可以用分表存储,分表备份和分表导入的方式实现。

    例如:查询视图 DATA 包含 data_201801, data_2018_02, data_2018_03 ... 等多个数据表,备份 data_201801 后删除其中数据,如果要恢复数据,将备份文件导入到 data_201801 即可。
    虽然不如物理文件方便,但貌似可行。
    liuweisj
        9
    liuweisj  
       Mar 15, 2018   ❤️ 2
    你这说的正是 hive 吗
    lcgui7
        10
    lcgui7  
       Mar 15, 2018
    oracle
    idblife
        11
    idblife  
       Mar 15, 2018
    分区表
    很多年前的成熟技术了
    feverzsj
        12
    feverzsj  
       Mar 15, 2018
    你的要求对应的是集群,不要再想分文件这种原始的做法了
    loading
        13
    loading  
       Mar 15, 2018 via iPhone
    其实楼主这样做的目的究竟是啥……
    要性能还是要备份简单,都有很好的成熟方案。
    tailf
        14
    tailf  
       Mar 15, 2018
    我觉得用多个 server 可以解决问题。
    bfbd
        15
    bfbd  
    OP
       Mar 15, 2018 via Android
    @loading 主要是想分块儿备份,还能选块儿恢复。
    hellojinjie
        16
    hellojinjie  
       Mar 15, 2018   ❤️ 1
    hive 妥妥的满足你的每一点要求
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3635 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 58ms · UTC 04:52 · PVG 12:52 · LAX 21:52 · JFK 00:52
    ♥ Do have faith in what you're doing.