我正在写一个脚本,我希望能够将数据导入数据库表。该表是mysql,SQLite 3或PostgreSQL。假设它可能是很多数据(数据是电子商务软件的产品/类别/描述等)。
保存此类数据的最佳(最快和更普遍使用)格式是什么?导入数据的最佳方法是什么?
我做了一些研究,但这只是让问题变得更加困难。例如,有人说csv更好,因为它更小,有人说xml更糟,因为没有一个标准..有人说xml更好,因为数据更容易处理。
思考?我也对其他格式持开放态度。如果有所不同,该软件是用PHP编写的。
答案 0 :(得分:7)
我几乎总是使用CSV来存储SQL之外的数据。它增加的唯一真正的复杂功能就是记住要正确地逃避一切!
额外的好处是,大多数电子表格软件都可以正常阅读。
答案 1 :(得分:2)
我认为最好利用每个数据库导出/导入功能并使用推荐的格式。例如,对于MySQL,您可以使用LOAD DATE INFILE
“LOAD DATA INFILE语句以非常高的速度将文本文件中的行读取到表中。文件名必须以文字字符串形式给出。”
是的,如果您需要一种格式,我也建议使用CSV,因为我使用它并且非常便于携带且易于更改和阅读,并且同意@Chris G.
答案 2 :(得分:1)
我认为CSV和XML有不同的用途:
最新版本的mysql支持XML导入:http://dev.mysql.com/doc/refman/5.5/en/load-xml.html
答案 3 :(得分:0)
欢迎你的想法。我花了两天时间阅读关于XML序列化的.NET文献。我认为它更具可读性,而且经验对我有好处,特别是在参考SOAP方面。如果你有很多数据,它肯定比CSV更具可读性。也许是我,.NET,或者我的XML Schema定义(或者是欲望?)但是我很遗憾没有使用标准的流/序列化机制编写XML并且超出了框架的额外功能。我在过去两天学到的只是XML Schema和一些我无法控制的.NET框架。
您确实已经使用XML添加了类型安全性,但我会质疑它对于不匹配元素的默认值是否灵活
答案 4 :(得分:0)
你最适合回答自己。所有这些方法都有其优点和缺点。
我首先提出了一个建议,尝试在您的应用程序中创建一个API,让您轻松更改您提供的格式。如果您有一些MVC架构的经验,请将XML或CSV输出视为一种视图。如果您创建一个可以轻松填写其他模板的界面,那么在需要其他格式的情况下,您将更加灵活。
最后,处理这两种格式将非常相似。处理标准化XML需要更多练习,有时可能会很棘手。例如,使用像UBL 2.0这样的标准(我在电子商务解决方案中看到的很常见)将为您提供一个强大的解决方案,但扩展它是一件令人头疼的事情,除非您熟练使用XML及其模式。但是,您将使用文档化的语言进行交流。
如果您选择您定义的导出的任意格式/布局,并且客户/供应商/任何其他第三方必须实施它,那么您选择的内容无关紧要,解析或构建它们所需的时间是大致相同。
答案 5 :(得分:0)
csv更容易使用,而xml更高级,从我的观点来看,带来更多的开销
答案 6 :(得分:0)
虽然非常规,但我会使用JSON - 有点像这样...
// select your data
$result = mysql_query("SELECT * FROM some_table;");
// build an associative array for each row, and add to total data
while($row = mysql_fetch_assoc($result)){
$rows[] = $row;
}
// encode it all as JSON
$data = json_encode( $rows );
其优点在于,数据在编码之前作为一个非常容易操作的对象(在我的示例中为$rows
)存储在php中,并且可以传递给几乎任何语言以供进一步处理。
如果你担心数据的大小,那么你可以压缩它,因为它是重复的,它压缩得非常好。
此方法处理所有转义,并提供一种编码/解码数据的方法,而无需构建自定义函数来重新附加列标题等...
它不是最有效的方法,并且不会产生最简洁的格式,但它具有高度的可移植性,并且可以非常容易地处理......就像这样:
// convert JSON string into php object
// then loop over it to operate on each row
foreach(json_decode($data) as $row){
// create empty array for keys and vals
$vals = $keys = array();
// create array of keys and vals in the data row
foreach($row as $k => $v){
$keys[] = $k; $vals[] = $v;
}
// build an insert statement using the keys and values from each row
echo "INSERT INTO some_table (".implode(',',$keys).") VALUES (".implode(',',$vals).");\n";
}
虽然它不是最有效的,但我喜欢这种处理数据的方式,而且我觉得它不容易出错,因为数据和数据的结构永远不会分开。
我怀疑很多人会同意这一点,因为编码和解码JSON的开销意味着它与CSV相比表现不佳,尽管可能比XML更好。