20211207171500_sent_historay_copy.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. /*
  3. 迁移 sentence pr 库
  4. 从旧数据表中提取数据插入到新的表
  5. 插入时用uuid判断是否曾经插入
  6. 曾经插入就不插入了
  7. */
  8. require_once __DIR__."/../../app/config.php";
  9. # 更新索引表
  10. $src_db=_SRC_USER_SENTENCE_HISTORAY_;#源数据库
  11. $src_table=_TABLE_SRC_SENTENCE_HISTORAY_;#源表名
  12. $dest_db=_FILE_DB_USER_SENTENCE_HISTORAY_;#目标数据库
  13. $dest_table=_TABLE_SENTENCE_HISTORAY_;#目标表名
  14. fwrite(STDOUT,"migarate sent_historay".PHP_EOL);
  15. #打开源数据库
  16. $PDO_SRC = new PDO($src_db,_DB_USERNAME_,_DB_PASSWORD_,array(PDO::ATTR_PERSISTENT=>true));
  17. $PDO_SRC->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  18. fwrite(STDOUT,"open src table".PHP_EOL);
  19. #打开目标数据库
  20. $PDO_DEST = new PDO($dest_db,_DB_USERNAME_,_DB_PASSWORD_,array(PDO::ATTR_PERSISTENT=>true));
  21. $PDO_DEST->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  22. fwrite(STDOUT,"open dest table".PHP_EOL);
  23. $queryInsert = "INSERT INTO ".$dest_table."
  24. (
  25. sent_uid,
  26. user_uid,
  27. content,
  28. landmark,
  29. date,
  30. created_at)
  31. VALUES ( ? , ? , ? , ? , ? , to_timestamp(?))";
  32. $commitData = [];
  33. $allInsertCount = 0;
  34. $allSrcCount = 0;
  35. $count = 0;
  36. #从源数据表中读取
  37. $query = "SELECT * FROM ".$src_table." WHERE true ";
  38. $stmtSrc = $PDO_SRC->prepare($query);
  39. $stmtSrc->execute();
  40. while($srcData = $stmtSrc->fetch(PDO::FETCH_ASSOC)){
  41. $allSrcCount++;
  42. #插入目标表
  43. {
  44. #查询目标表中是否有相同数据
  45. $queryExsit = "SELECT id FROM ".$dest_table." WHERE sent_uid = ? and user_uid = ? and content=? and date=? ";
  46. $getExist = $PDO_DEST->prepare($queryExsit);
  47. $getExist->execute(array($srcData["sent_id"],$srcData["user_id"],$srcData["text"],$srcData["date"]));
  48. $exist = $getExist->fetch(PDO::FETCH_ASSOC);
  49. if(!$exist){
  50. #没有相同数据
  51. $commitData[] = array(
  52. $srcData["sent_id"],
  53. $srcData["user_id"],
  54. $srcData["text"],
  55. $srcData["landmark"],
  56. (int)$srcData["date"],
  57. $srcData["date"]/1000
  58. );
  59. $count++;
  60. $allInsertCount++;
  61. }
  62. if($count ==10000){
  63. #10000行插入一次
  64. // 开始一个事务,关闭自动提交
  65. $PDO_DEST->beginTransaction();
  66. $stmtDEST = $PDO_DEST->prepare($queryInsert);
  67. foreach ($commitData as $key => $value) {
  68. $stmtDEST->execute($value);
  69. if (!$stmtDEST || ($stmtDEST && $stmtDEST->errorCode() != 0)) {
  70. $error = $PDO_DEST->errorInfo();
  71. echo "error - $error[2] ";
  72. exit;
  73. }
  74. }
  75. // 提交更改
  76. $PDO_DEST->commit();
  77. $commitData = [];
  78. echo "finished $count".PHP_EOL;
  79. $count=0;
  80. }
  81. }
  82. }
  83. if($count>0){
  84. #最后的没有到10000的数据插入
  85. $PDO_DEST->beginTransaction();
  86. $stmtDEST = $PDO_DEST->prepare($queryInsert);
  87. foreach ($commitData as $key => $value) {
  88. $stmtDEST->execute($value);
  89. if (!$stmtDEST || ($stmtDEST && $stmtDEST->errorCode() != 0)) {
  90. $error = $PDO_DEST->errorInfo();
  91. echo "error - $error[2] ";
  92. exit;
  93. }
  94. }
  95. // 提交更改
  96. $PDO_DEST->commit();
  97. $commitData = [];
  98. echo "finished $count".PHP_EOL;
  99. }
  100. echo "insert done $allInsertCount in $allSrcCount ".PHP_EOL;
  101. echo "all done".PHP_EOL;