0

我们目前有某些由竖线分隔的文本组成的日志,其格式为

field1:value1|field2:value2|...|fieldN:valueN\n
field1:value1|field2:value2|...|fieldN:valueN\n
etc.

我有一个导入器脚本(运行 perl 然后运行 ​​mysqlimport 的 bash),它当前从每行的开头删除几个单词,然后在生成的文本文件上运行 mysqlimport。

我们正在将日志记录升级到输出 JSON 的数据服务。导入器脚本仍会将该 JSON 的内容导入 MySQL 数据库表。采用这种漂亮的 JSON 并将其转换为管道分隔的文件以与 mysqlimport 一起使用感觉像是一种糟糕的形式——但我有什么选择吗?我在 mysql 文档或论坛中找不到任何内容。

4

2 回答 2

0

只是一个友好的批评:对我来说,转换 a 是不好的:

  • json 文本字符串 -> 到管道分隔的数据 -> 到管道分隔的解析器 -> 到数据库或
  • json 文本字符串 -> 到管道分隔的数据 -> 到管道分隔的解析器 -> 到数组 -> 到数据库。

管道分隔的支持比 json 字符串少。

最好的方法是将数据保存在 json 字符串中。

然后,您可以使用任何您熟悉的编程语言对其进行解析。例如,把它放在一个数组中。然后,将每个数组相应地保存在数据库中。

但是,如果这是您的公司正在使用的,并且他们已经有一个以管道分隔的解析器,如果他们已经在构建一个,或者您很难提出建议(无论说服他们的不可能的方法是什么)。然后,最好的方法就是坚持一会儿。

如果你有自己的时间,你可以建立自己的

  • json 解析器 -> 到数组 -> 到数据库应用程序。
  • json 解析器 -> 到数据库应用程序。(基于键和值)

这更容易。

于 2012-12-11T19:30:40.230 回答
0

我宁愿将可靠的 JSON 转换为同样可靠的、与 mysqldump 兼容的SQL 多行insert语句

使用 VALUES 语法的 INSERT 语句可以插入多行。为此,请包含多个列值列表,每个列表都包含在括号中并用逗号分隔。例子:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

由于无论如何您都在使用 Perl 脚本,因此这不会造成太大问题。

于 2012-12-11T19:36:44.970 回答