20211214181900_user_operation_log_copy.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. /*
  3. 迁移 sentence pr 库
  4. 从旧数据表中提取数据插入到新的表
  5. 插入时用uuid判断是否曾经插入
  6. 曾经插入就不插入了
  7. */
  8. require_once __DIR__."/../../../public/app/config.php";
  9. require_once __DIR__."/../../../public/app/public/snowflakeid.php";
  10. set_exception_handler(function($e){
  11. fwrite(STDERR,"error-msg:".$e->getMessage().PHP_EOL);
  12. fwrite(STDERR,"error-file:".$e->getFile().PHP_EOL);
  13. fwrite(STDERR,"error-line:".$e->getLine().PHP_EOL);
  14. exit;
  15. });
  16. $start = time();
  17. # 雪花id
  18. $snowflake = new SnowFlakeId();
  19. $fpError = fopen(__DIR__.'/log/'.basename($_SERVER['PHP_SELF'],'.php').".err.data.csv",'w');
  20. $active_type[10] = "channel_update";
  21. $active_type[11] = "channel_create";
  22. $active_type[20] = "article_update";
  23. $active_type[21] = "article_create";
  24. $active_type[30] = "dict_lookup";
  25. $active_type[40] = "term_update";
  26. $active_type[42] = "term_create";
  27. $active_type[41] = "term_lookup";
  28. $active_type[60] = "wbw_update";
  29. $active_type[61] = "wbw_create";
  30. $active_type[70] = "sent_update";
  31. $active_type[71] = "sent_create";
  32. $active_type[80] = "collection_update";
  33. $active_type[81] = "collection_create";
  34. $active_type[90] = "nissaya_open";
  35. #user info
  36. $user_db=_FILE_DB_USERINFO_;#user数据库
  37. $user_table=_TABLE_USER_INFO_;#user表名
  38. # 更新索引表
  39. $src_db=_SQLITE_DB_USER_ACTIVE_LOG_;#源数据库
  40. $src_table=_SQLITE_TABLE_USER_OPERATION_LOG_;#源表名
  41. $dest_db=_PG_DB_USER_ACTIVE_LOG_;#目标数据库
  42. $dest_table=_PG_TABLE_USER_OPERATION_LOG_;#目标表名
  43. fwrite(STDOUT,"migarate user opration log".PHP_EOL);
  44. #打开user数据库
  45. $PDO_USER = new PDO($user_db,_DB_USERNAME_,_DB_PASSWORD_,array(PDO::ATTR_PERSISTENT=>true));
  46. $PDO_USER->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  47. fwrite(STDOUT,"open user table".PHP_EOL);
  48. #打开源数据库
  49. $PDO_SRC = new PDO($src_db,_DB_USERNAME_,_DB_PASSWORD_,array(PDO::ATTR_PERSISTENT=>true));
  50. $PDO_SRC->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  51. fwrite(STDOUT,"open src table".PHP_EOL);
  52. #打开目标数据库
  53. $PDO_DEST = new PDO($dest_db,_DB_USERNAME_,_DB_PASSWORD_,array(PDO::ATTR_PERSISTENT=>true));
  54. $PDO_DEST->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  55. fwrite(STDOUT,"open dest table".PHP_EOL);
  56. #删除源数据表中全部数据
  57. fwrite(STDOUT,"delete dest".PHP_EOL);
  58. $query = "delete from $dest_table";
  59. $stmtDest = $PDO_DEST->prepare($query);
  60. $stmtDest->execute();
  61. $queryInsert = "INSERT INTO ".$dest_table."
  62. (
  63. id,
  64. user_id,
  65. op_type_id,
  66. op_type,
  67. content,
  68. timezone,
  69. create_time,
  70. created_at)
  71. VALUES ( ? , ? , ? , ? , ? ,? , ? , to_timestamp(?))";
  72. $stmtDEST = $PDO_DEST->prepare($queryInsert);
  73. $commitData = [];
  74. $allInsertCount = 0;
  75. $allSrcCount = 0;
  76. $count = 0;
  77. #从user数据表中读取
  78. $query = "SELECT id FROM ".$user_table." WHERE userid = ? ";
  79. $stmtUser = $PDO_USER->prepare($query);
  80. #从源数据表中读取
  81. $query = "SELECT * FROM ".$src_table;
  82. $stmtSrc = $PDO_SRC->prepare($query);
  83. $stmtSrc->execute();
  84. while($srcData = $stmtSrc->fetch(PDO::FETCH_ASSOC)){
  85. $allSrcCount++;
  86. #插入目标表
  87. $commitData = array(
  88. $snowflake->id(),
  89. $srcData["user_id"],
  90. $srcData["active"],
  91. $active_type[$srcData["active"]],
  92. $srcData["content"],
  93. $srcData["timezone"],
  94. $srcData["time"],
  95. $srcData["time"]/1000
  96. );
  97. $stmtDEST->execute($commitData);
  98. $count++;
  99. $allInsertCount++;
  100. if($count ==10000){
  101. #10000行插入一次
  102. echo "finished $count".PHP_EOL;
  103. $count=0;
  104. }
  105. }
  106. fwrite(STDOUT,"insert done $allInsertCount in $allSrcCount ".PHP_EOL) ;
  107. fwrite(STDOUT, "all done in ".(time()-$start)."s".PHP_EOL);