mysql往mongodb迁移数据

本文分享了使用Python从MySQL迁移10万条客户沟通记录到MongoDB的过程,重点介绍了如何利用MongoDB的文档结构优势,将同一客户的多次沟通记录整合为单一内嵌文档,以提高数据管理和查询效率。

业务场景:需要将一个客户的所有沟通记录添加到一个客户中去,但是不知道客户被沟通的次数,导致不知道应该添加多少字段,mysql扩展性差,不能满足这个需求。mongodb作为文档型数据库,可以随意增删字段,在这方面的优势比较突出。下面是用python 将MYSQL存储到MONGODB的一个简单例子。

使用工具版本如下:

python 3.7

MONGODB3.4

MYSQL 5.5

# 导入pymysql,pymongo的包
import pymysql;
import pymongo;

class Connect:
    def mysqlCon(self,host,user,passwd,db,port,charset):
        # MYSQL连接,获取一个数据库连接,注意如果是UTF-8类型的,需要指定数据库
        conn = pymysql.connect(host=host, user=user, passwd=passwd, db=db, port=port, charset=charset);
        # 获取一个游标
        cur = conn.cursor();
        return conn,cur;

    def mongoCon(self,host,port):
        # MONGODB连接
        mongoclient=pymongo.MongoClient("localhost", port=27017);
        # 获取mongodb集合
        collection = mongoclient.mydb.communication_log;
        return mongoclient,collection;



try:
    connect = Connect();

    conn, cur = connect.mysqlCon(host='192.168.1.200', user='fang_read', passwd='read2wsx', db='fangdb', port=3307,charset='utf8');
    cur.execute('select customer_id,create_user_id,content,create_time from crm_communication_log a order by create_time desc limit 100000');
    data = cur.fetchall();

    mongoclient, collection = connect.mongoCon("localhost", port=27017);
    # 根据customer_id字段,将同一个客户的沟通记录放在了一个set内嵌文档中
    for d in data:
        collection.update_many({"customer_id": d[0]},
                               {"$addToSet": {"log": {"create_user_id": d[1], "content": d[2], "create_time": d[3]}}},
                               upsert=True);
    cur.close();
    conn.close();
    mongoclient.close();
except Exception as e:
    print(e);


这里将mysql迁移到mongodb使用python主要是为了实现将同一个客户的沟通记录放在一个内嵌文档中的目的。此次迁移有10万的数据量,大概耗时40分钟,时间还是很久的,以后有好的解决方案还会继续更新。

如果只是简单的迁移,还有很多其他更简单的方法可以使用,这里就不再详述。

 

转载于:https://my.oschina.net/u/4010291/blog/2962130

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值