V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
bfbd
V2EX  ›  问与答

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

  •  
  •   bfbd · 2018-03-14 21:49:20 +08:00 · 2135 次点击
    这是一个创建于 2445 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    第 1 条附言  ·  2018-03-15 10:03:25 +08:00
    折衷的解决办法:

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

    例如:查询视图 DATA 包含 data_201801, data_2018_02, data_2018_03 ... 等多个数据表,备份 data_201801 后删除其中数据,如果要恢复数据,将备份文件导入到 data_201801 即可。
    虽然不如物理文件方便,但貌似可行。
    liuweisj
        9
    liuweisj  
       2018-03-15 10:09:42 +08:00   ❤️ 2
    你这说的正是 hive 吗
    lcgui7
        10
    lcgui7  
       2018-03-15 10:18:14 +08:00
    oracle
    idblife
        11
    idblife  
       2018-03-15 10:18:56 +08:00
    分区表
    很多年前的成熟技术了
    feverzsj
        12
    feverzsj  
       2018-03-15 10:25:15 +08:00
    你的要求对应的是集群,不要再想分文件这种原始的做法了
    loading
        13
    loading  
       2018-03-15 11:50:40 +08:00 via iPhone
    其实楼主这样做的目的究竟是啥……
    要性能还是要备份简单,都有很好的成熟方案。
    tailf
        14
    tailf  
       2018-03-15 13:57:20 +08:00
    我觉得用多个 server 可以解决问题。
    bfbd
        15
    bfbd  
    OP
       2018-03-15 16:32:52 +08:00 via Android
    @loading 主要是想分块儿备份,还能选块儿恢复。
    hellojinjie
        16
    hellojinjie  
       2018-03-15 16:43:48 +08:00   ❤️ 1
    hive 妥妥的满足你的每一点要求
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2873 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 08:53 · PVG 16:53 · LAX 00:53 · JFK 03:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.