• 亿级mongodb数据迁移


    1. 预先准备有效数据单号池,通过单号拉取数据处理

    单号表默认为1

    01 使用findAndModify 更新单号表状态为 2 读取单号 循环读取100 条

    02 通过运单号批量查询 Aladin_WayBillStatus 表 获取数据

    03 拼接 新增 SQL语句

    04 批量提交给 Hbase

    05 批量更新 单号表 状态 为 3

    方式优点

    简单粗暴,开发简单 不超过200行代码,应为findAndModify 的原子性可以部署N个节点。

    方式缺点

      执行效率不高,并且提升优化空间几乎没有,使用多线程获取单号反而会更加耗时。

      执行效率得看获取数据的表的承受能力。

      对现有数据库照成压力

    2.预支时间段表,通过时间段刷数据。

    01 使用findAndModify  随机获取一个时段

    02 通过时间段拉取一批数据

    03 拼接 新增 SQL语句

    04 批量提交给 Hbase

    05 批量更新 时间段表 状态 为 3

    方式优点

    效率会比方式01 提高不少。

    由于findAndModify   可以多节点部署。

    方式缺点

      每次时间段获取的数据量都是不可控的,业务高峰期时间段数据量可能非常大,业务低峰期数据量非常小,时间段生成规则会非常麻烦

           对现有数据库照成压力

    3.通过mongodb查询游标扫描数据。

    find查询默认是从最旧数据开始。

    _id 可以使用 $gt 查询 _id是有序的。

        public void test_2(ObjectId o) {
            DBCursor s;
            if (o == null) {
                s = mt.getCollection("orderid").find();
            } else {
                DBObject lisi = new BasicDBObject();
                lisi.put("_id", new BasicDBObject("$gt", o));
                s = mt.getCollection("orderid").find(lisi);
            }
            try {
                while (s.hasNext()) {
                    DBObject item = s.next();
                    o = (ObjectId) item.get("_id");
                    String me = ((BasicDBObject) item).toJson();
                    mq.send(new Message("mgtomq", me.getBytes(RemotingHelper.DEFAULT_CHARSET)));
                    System.out.println(o);
                }
            } catch (Exception e) {
                test_2(o);
            }
        }

        方式优点:

          不会对数据库照成太大压力。

          读取的数据也是从老到新的数据。

        方式缺点:

          无法部署多个节点,获取数据和处理数据一起处理效率不高。

          解决方式: 通过消息中间件解耦,读取数据,生产消息,处理数据设置每次100条消费消息。

        这种读取数据方式也是 datex 使用的,处理方式不通,但是想法差不多。

    如果不需要对数据进行处理,可以直接使用 datex 

  • 相关阅读:
    <转>使用IdentifyTask查询图层属性
    转:Java+blazeds+Flex的例子 .
    转 ArcGIS Runtime 加载SHAPE数据的另一种方式动态图层 .
    序列密码之A5
    哈希函数之MD5
    DjangoRestFramework使用总结
    公钥密码之RSA
    Request Line is too large (xxxx > 4094) 问题处理
    古典密码之仿射密码
    Linux重定向
  • 原文地址:https://www.cnblogs.com/atliwen/p/11457195.html
Copyright © 2020-2023  润新知