【问题标题】:PHP - Advise on large data validation and ImportsPHP - 就大数据验证和导入提供建议
【发布时间】:2015-04-09 12:37:15
【问题描述】:

我目前正在研究从 excel 中导入价格的功能,并正在寻找有关在 PHP 和 SQL 之间处理大型数据集的最佳方法的建议。

基本上,用户可以导入单个文件来更新他们的所有价目表(最多 15 个)。所以一行示例数据可能看起来像

会员代码|价格表1 价格|价格表2 价格|价格表3 价格|价格表4 价格

这些文件最多可包含 30 000 条唯一记录。问题出在需要验证这些数据并在表格中返回给用户,表格中突出显示了某些单元格,其中值的价格变化大于 40% 的涨幅。

产品存储在多个表中,因此获取单行价目表值的查询最多可能需要一秒钟。最初我尝试将所有记录一起获取(这也需要一些时间),但如果文件有超过 10000 条记录,它会变得太大,sql server 无法处理。

目前我可以让它工作,但速度非常慢(1000 条记录需要 9 分钟来验证),而且我一次只验证一条记录。

如果有人对如何加快此过程有任何建议,或者对如何最好地处理如此庞大的验证过程有任何建议,我将不胜感激。只要资源友好且速度更快,我不会拒绝任何想法。

【问题讨论】:

  • 我刚刚做了类似的东西。首先导入临时表中的所有文件。用必要的数据(如产品 ID 等)填充它,添加 indizes。然后验证只是编写 SQL-Command 将现有数据与临时数据进行比较。同样,您可以对导入数据进行分页和排序以显示给用户。或者说记录太多,点击这里下载完整报告。
  • 不完全是一个答案(因此这是一个注释),但您能否将数据导入 SQL 服务器上的临时表,在 T-SQL 中运行比较查询,然后将数据返回到php?我猜想比较在 SQL 上会比在 PHP 上运行得更快,因为缺少从 SQL 到 PHP 等移动数据
  • 谢谢大家,我很快就会试一试,听起来可能会奏效

标签: php sql sql-server-2012


【解决方案1】:

非常感谢Jens SchulzeDaveyBoy,我找到了一个了不起的解决方案。我现在将数据写入服务器上的 csv 文件,并使用 sqls bulk import 函数将数据导入临时表,并在删除表之前使用查询来交叉引用数据。结果非常快(创建一个包含 20000 条记录的文件只需 0.3 秒,将其插入表中,选择记录并在服务器获得数据后将其删除)下面是一个示例。

CSV 格式(将文件放在 C:\csvtest.txt 中)

1,TD015022,9000.00,9000.00,9000.00,9000.00,9000.00,9000.00 
2,TD015023,7.00,7.00,7.00,7.00,7.00,7.00 
3,TD015024,14.00,14.00,14.00,14.00,14.00,14.00 
4,TD015025,9000.00,9000.00,9000.00,9000.00,9000.00,9000.00 

SQL

CREATE TABLE CSVTest
(ID INT,
Member_Code VARCHAR(40),
[Frank Test] VARCHAR(40),
[Price List 1] VARCHAR(40),
[Price List 2] VARCHAR(40),
[Price List 3] VARCHAR(40),
[Ten Percent] VARCHAR(40),
[thaka bts test] VARCHAR(40)
)
GO

BULK
INSERT CSVTest
FROM 'c:\csvtest.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO
--Check the content of the table.
SELECT *
FROM CSVTest
GO
--Drop the table to clean up database.
DROP TABLE CSVTest
GO

希望这可以帮助下一个卡住的人。 还要感谢sqlauthority 提供了一个可以开始的工作示例。

【讨论】:

  • 我只能明天做这个,
  • 哦,抱歉不知道。 :)
猜你喜欢
  • 2017-01-10
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-01
相关资源
最近更新 更多