zoukankan      html  css  js  c++  java
  • mongo索引批量在postgres里面重建

    一些etl工具从mongo同步到pg库里面的数据,多数能处理这种异构的索引,我自己找了一种不那么复杂的方法:

    (1)写一个js,在mongo导出源库所有索引信息:

     1 root@ip-10-10-30-211:~# cat mongo_idx.js 
     2 var collectionList = db.getCollectionNames();
     3 for(var index in collectionList){
     4     var collection = collectionList[index];
     5     var cur = db.getCollection(collection).getIndexes();
     6     if(cur.length == 1){
     7         continue;
     8     }
     9     for(var index1 in cur){
    10     var next = cur[index1];
    11     if(next["key"]["_id"] == '1'){
    12         continue;
    13     }
    14     print("(""+collection+"")" +","+JSON.stringify(next.key))}}

    然后导出的显示格式为:

    #mongo mongo-xxxx-pri.xxxx.space:3717/databasename -usyncuser -pxxxx mongo_idx.js > monidx.json
    #cat monidx.json (
    "mg_result_all"),{"login":1,"brokerid":1,"usertype":1} ("mg_result_all"),{"publishfrozentime":1,"usertype":1,"accountstatus":1,"accounttype":1,"equity":1,"period_trade":1} ("mg_result_all"),{"rate_ss_profit_balance_close":-1} ("mg_result_brsymday"),{"login":1,"brokerid":1} ("mg_result_brsymday"),{"login":1,"brokerid":1,"close_date":1} ("mg_result_day"),{"login":1,"brokerid":1,"close_date":1} ("mg_result_follall"),{"login":1,"brokerid":1} ("mg_result_follall"),{"masteraccount":1,"masterbrokerid":1} ("mg_result_follall"),{"login":1,"brokerid":1,"usertype":1,"masteraccount":1,"masterbrokerid":1,"masterusertype":1} ("mg_result_follall"),{"masteraccount":1,"masterbrokerid":1,"close_weekofyear":1} ("mg_result_follday"),{"login":1,"brokerid":1,"usertype":1,"masteraccount":1,"masterbrokerid":1,"masterusertype":1} ("mg_result_follday"),{"login":1,"brokerid":1,"close_date":1} ("mg_result_follday"),{"masteraccount":1,"masterbrokerid":1,"close_date":1} ("mg_result_follday"),{"login":1,"brokerid":1,"masteraccount":1,"masterbrokerid":1,"close_date":1} ("mg_result_follday"),{"login":1,"brokerid":1,"masteraccount":1,"masterbrokerid":1,"close_weekofyear":1} ("mg_result_follweekofyear"),{"login":1,"brokerid":1,"standardsymbol":1,"close_weekofyear":1} ("mg_result_hour"),{"login":1,"brokerid":1} ("mg_result_month"),{"login":1,"brokerid":1,"close_month":1} ("mg_result_nusymall"),{"standardsymbol":1} ("mg_result_order"),{"login":1,"brokerid":1,"ticket":1} ("mg_result_sorted_all"),{"statName":1,"updatets":1} ("mg_result_sorted_follweekofyear"),{"statName":1,"updatets":1,"close_weekofyear":1} ("mg_result_sorted_follweekofyear"),{"statName":1,"updatets":1,"close_weekofyear":1,"login":1,"brokerid":1} ("mg_result_sorted_weekofyear"),{"statName":1,"updatets":1,"close_weekofyear":1} ("mg_result_sorted_weekofyear"),{"statName":1,"updatets":1,"close_weekofyear":1,"login":1,"brokerid":1} ("mg_result_symall"),{"login":1,"brokerid":1,"standardsymbol":1} ("mg_result_symall"),{"login":1,"brokerid":1,"money_profit_close_max":1} ("mg_result_symday"),{"login":1,"brokerid":1,"close_date":1} ("mg_result_symday"),{"login":1,"brokerid":1,"standardsymbol":1,"close_date":1} ("mg_result_symmonth"),{"login":1,"brokerid":1,"standardsymbol":1} ("mg_result_symmonth"),{"login":1,"brokerid":1,"standardsymbol":1,"close_month":1} ("mg_result_symweekofyear"),{"login":1,"brokerid":1,"standardsymbol":1,"close_weekofyear":1} ("mg_result_week"),{"login":1,"brokerid":1} ("mg_result_weekofyear"),{"login":1,"brokerid":1}

    (2)把这个文件导入postgres数据库存为一个字段,然后写一个sql,生成postggres语法的创建索引语句:

    1 select  concat('create index idx_', split_part(translate(idx_name,'(){}:-1"',''),',',1),'_',floor(random()*(25-10)+10),' on ',split_part(translate(idx_name,'(){}:-1"',''),',',1)
    2     ,'(',ltrim(SUBSTRING(translate(idx_name,'(){}:-1',''),strpos(translate(idx_name,'(){}:-1',''),','),500),','),
    3           ')',';') from  devops.mongo_index_ddl;

    生成的创建索引为:

    1 create index idx_mg_result_all_12 on mg_result_all(""publishfrozentime"",""usertype"",""accountstatus"",""accounttype"",""equity"",""period_trade"");
    2 create index idx_mg_result_all_23 on mg_result_all(""rate_ss_profit_balance_close"");
    3 create index idx_mg_result_brsymday_21 on mg_result_brsymday(""login"",""brokerid"");
    4 create index idx_mg_result_brsymday_12 on mg_result_brsymday(""login"",""brokerid"",""close_date"");
    5 create index idx_mg_result_day_11 on mg_result_day(""login"",""brokerid"",""close_date"");"
    6 create index idx_mg_result_follall_12 on mg_result_follall(""login"",""brokerid"");
    7 create index idx_mg_result_follall_17 on mg_result_follall(""masteraccount"",""masterbrokerid"");
    8 create index idx_mg_result_follall_13 on mg_result_follall(""login"",""brokerid"",""usertype"",""masteraccount"",""masterbrokerid"",""masterusertype"");
    ....

    最后,如果有需要可以做成脚本,只执行一次就好。

  • 相关阅读:
    ongene database
    Question: Database Of Tumor Suppressors And/Or Oncogenes
    很不错的python 机器学习博客
    肿瘤细胞新抗原
    Apollo和分布式配置
    Spring Boot2.0之 整合XXL-Job
    XXL-Job高可用集群搭建
    eclipse修改端口启动多个tomcat
    XXL-Job路由策略
    分布式任务调度平台XXL-Job集群版搭建
  • 原文地址:https://www.cnblogs.com/5sdba-notes/p/13492876.html
Copyright © 2011-2022 走看看