Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MariaDB通过更改文件更新表内容_Php_Database_Mariadb - Fatal编程技术网

Php MariaDB通过更改文件更新表内容

Php MariaDB通过更改文件更新表内容,php,database,mariadb,Php,Database,Mariadb,我有以下问题: 我在文本文件中有一个数据集(不是xml或csv编码的文件或其他文件,只是由\t和\n分隔的字段值),它每2分钟更新一次。我需要将文件中的数据放入MariaDB数据库,这本身并不困难。 但是,我不确定的是,如果文件内容发生更改,我将如何更新表。我曾考虑过截断表,然后再次填充,但每2分钟使用1000个数据集进行一次,这意味着在这些更新过程中数据库不完整会出现一些严重问题,这使得它不是一个可用的解决方案(也不会使用更少的数据集:D) 我考虑的另一个解决方案是将新数据附加到现有表中,并在

我有以下问题:
我在文本文件中有一个数据集(不是xml或csv编码的文件或其他文件,只是由\t和\n分隔的字段值),它每2分钟更新一次。我需要将文件中的数据放入MariaDB数据库,这本身并不困难。
但是,我不确定的是,如果文件内容发生更改,我将如何更新表。我曾考虑过截断表,然后再次填充,但每2分钟使用1000个数据集进行一次,这意味着在这些更新过程中数据库不完整会出现一些严重问题,这使得它不是一个可用的解决方案(也不会使用更少的数据集:D)
我考虑的另一个解决方案是将新数据附加到现有表中,并在唯一列上使用delimter(例如,在更新之前使用cols 1-1000,附加数据,然后在更新之后使用值1001-2000,并删除1-1000,在大约2次更新之后,再次从id 1开始)。
更新更改字段不是一个选项,因为原始数据格式会使跟踪已更改(或未更改)的列变得非常困难

然而,我不确定最佳实践,因为我对SQL和其他东西比较陌生,我想听听你的意见,也许我只是忽略了一些明显的东西…

正如Alex所建议的,我将创建一个临时表,将数据插入临时表,截断生产表,然后从临时表插入。工作起来很有魅力

根据Alex的建议,我将创建一个临时表,将数据插入临时表,截断生产表,然后从临时表插入。工作起来很有魅力

更好

CREATE TABLE new LIKE real;   -- permanent, not TEMPORARY
load `new` from the incoming data
RENAME TABLE real TO old, new TO real;
DROP TABLE old.
优点:

  • real
    对于应用程序来说永远不可见,也不为空
  • 重命名
    是“瞬时的”和“原子的”
    • 甚至更好

      CREATE TABLE new LIKE real;   -- permanent, not TEMPORARY
      load `new` from the incoming data
      RENAME TABLE real TO old, new TO real;
      DROP TABLE old.
      
      优点:

      • real
        对于应用程序来说永远不可见,也不为空
      • 重命名
        是“瞬时的”和“原子的”

      您已经标记了mqsql、sql server和mariadb。。您使用的是哪一个…?MariaDB,很抱歉造成混淆,将更新问题简短地将数据导入单独的“暂存”表,必要时对其进行验证,然后在单个事务中从“生产”表中删除数据并从“暂存”中插入.从暂存中截断生产和插入不会造成延迟,并且必须复制数据吗?或者这会在瞬间起作用吗?编辑:没关系,它花了0.2084秒。谢谢^。^您已经标记了mqsql、sql server和mariadb。。您使用的是哪一个…?MariaDB,很抱歉造成混淆,将更新问题简短地将数据导入单独的“暂存”表,必要时对其进行验证,然后在单个事务中从“生产”表中删除数据并从“暂存”中插入.从暂存中截断生产和插入不会造成延迟,并且必须复制数据吗?或者这会在瞬间起作用吗?编辑:没关系,它花了0.2084秒。谢谢^^