redis_upgrade_pali_sent.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. /*
  3. 从巴利句子列表数据库中提取数据填充redis
  4. 每个句子包含
  5. pali
  6. id
  7. sim_count
  8. */
  9. require_once __DIR__."/../config.php";
  10. require_once __DIR__."/../redis/function.php";
  11. if (isset($argv[1])) {
  12. if ($argv[1] == "del") {
  13. $redis = redis_connect();
  14. if($redis){
  15. $keys = $redis->keys('pali_sent_*');
  16. $count=0;
  17. foreach ($keys as $key => $value) {
  18. # code...
  19. $deleted = $redis->del($value);
  20. $count += $deleted;
  21. }
  22. fwrite(STDOUT,"delete ok ".$count.PHP_EOL) ;
  23. }else{
  24. fwrite(STDERR, "redis connect error ".PHP_EOL);
  25. }
  26. }
  27. } else {
  28. $dbh = new PDO(_FILE_DB_PALI_SENTENCE_, _DB_USERNAME_, _DB_PASSWORD_, array(PDO::ATTR_PERSISTENT => true));
  29. $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  30. $db_pali_sent_sim = new PDO(_FILE_DB_PALI_SENTENCE_SIM_, _DB_USERNAME_, _DB_PASSWORD_, array(PDO::ATTR_PERSISTENT => true));
  31. $db_pali_sent_sim->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  32. $query = "SELECT id, book,paragraph, word_begin as begin ,word_end as end ,html FROM "._TABLE_PALI_SENT_." WHERE true ";
  33. $stmt = $dbh->prepare($query);
  34. $stmt->execute();
  35. $redis = redis_connect();
  36. $stringSize = 0;
  37. $count = 0;
  38. if ($redis) {
  39. while ($sent = $stmt->fetch(PDO::FETCH_ASSOC)) {
  40. $count++;
  41. $stringSize += strlen($sent["html"]);
  42. if ($stringSize > 50000000) {
  43. sleep(1);
  44. $stringSize = 0;
  45. }
  46. if($count%10000==0){
  47. fwrite(STDOUT, $count . "-".$sent["book"] . "_" . $sent["paragraph"] . "\n");
  48. }
  49. $result = $redis->hSet('pali://sent/' . $sent["book"] . "_" . $sent["paragraph"] . "_" . $sent["begin"] . "_" . $sent["end"], "pali", $sent["html"]);
  50. if($result===FALSE){
  51. fwrite(STDERR, "hSet error \n");
  52. }
  53. $result = $redis->hSet('pali://sent/' . $sent["book"] . "_" . $sent["paragraph"] . "_" . $sent["begin"] . "_" . $sent["end"], "id", $sent["id"]);
  54. $query = "SELECT count FROM "._TABLE_SENT_SIM_INDEX_." WHERE sent_id = ? ";
  55. $sth = $db_pali_sent_sim->prepare($query);
  56. $sth->execute(array($sent["id"]));
  57. $row = $sth->fetch(PDO::FETCH_ASSOC);
  58. if ($row) {
  59. $pali_sim = $row["count"];
  60. } else {
  61. $pali_sim = 0;
  62. }
  63. $result = $redis->hSet('pali://sent/' . $sent["book"] . "_" . $sent["paragraph"] . "_" . $sent["begin"] . "_" . $sent["end"], "sim_count", $pali_sim);
  64. }
  65. fwrite(STDOUT, "完成 ". count($redis->keys("pali://sent/*")).PHP_EOL);
  66. } else {
  67. fwrite(STDERR, "连接redis失败".PHP_EOL);
  68. }
  69. }