Tôi muốn tải lên tệp csv lớn khoảng 10.000.000 bản ghi trong bảng mysql cũng chứa cùng một hoặc nhiều không. hồ sơ và một số bản ghi trùng lặp. Tôi đã cố gắng sử dụng dữ liệu cục bộ nhưng nó cũng mất nhiều thời gian hơn. Làm cách nào tôi có thể giải quyết vấn đề này mà không phải đợi lâu. Nếu nó không thể được giải quyết sau đó làm thế nào tôi có thể làm điều đó với AJAX để gửi một số hồ sơ và xử lý nó tại một thời điểm và sẽ làm điều đó cho đến khi toàn bộ csv được tải lên/proccessed.Tải lên tệp CSV lớn xấp xỉ 10.000.000 bản ghi trong bảng mysql cũng chứa hàng trùng lặp
Trả lời
Hãy thử điều này:
load data local infile '/yourcsvfile.csv' into table yourtable fields terminated by ',' lines terminated by '\r\n'
LOAD DATA INFILE
sẽ không được đánh bại tốc độ khôn ngoan. Có một vài điều bạn có thể làm để tăng tốc độ:
- Thả hoặc vô hiệu hóa một số chỉ mục (nhưng tất nhiên, bạn sẽ đợi chúng để tạo sau khi tải. Nhưng điều này thường nhanh hơn). Nếu bạn đang sử dụng MyISAM, bạn có thể
ALTER TABLE *foo* DISABLE KEYS
, nhưng InnoDB không hỗ trợ điều đó, thật không may. Thay vào đó, bạn sẽ phải thả chúng. - Tối ưu hóa cài đặt my.cnf của bạn. Đặc biệt, bạn có thể vô hiệu hóa rất nhiều thứ an toàn (như fsync). Tất nhiên, nếu bạn gặp sự cố, bạn sẽ phải khôi phục bản sao lưu và bắt đầu tải lại. Ngoài ra, nếu bạn đang chạy my.cnf mặc định, cuối cùng tôi đã kiểm tra khá tối ưu của nó cho một máy cơ sở dữ liệu. Rất nhiều hướng dẫn điều chỉnh được xung quanh.
- Mua phần cứng nhanh hơn. Hoặc thuê một số (ví dụ: hãy thử một ví dụ nhanh về ECC của Amazon).
- Như đề cập @ZendDevel, hãy xem xét các giải pháp lưu trữ dữ liệu khác, nếu bạn không bị khóa vào MySQL. Ví dụ, nếu bạn chỉ lưu trữ một danh sách các số điện thoại (và một số dữ liệu với chúng), một bảng băm đơn giản sẽ nhanh hơn nhiều lần.
Nếu vấn đề là nó giết hiệu suất cơ sở dữ liệu, bạn có thể chia tệp CSV thành nhiều tệp CSV và tải chúng theo khối.
Thực ra tôi đang đối phó với giải pháp danh sách trắng cho số điện thoại di động trong một trung tâm cuộc gọi và tôi phải tải lên nhiều dữ liệu này mỗi ngày (các hàng trùng lặp ở đó). – akashdeep
@ user969923: Nghe có vẻ như bạn có thể kết hợp tối ưu hóa my.cnf nếu điều đó chưa được thực hiện và mua phần cứng nhanh hơn. Các Serverfault folks có thể giúp bạn nhiều hơn với các chi tiết cụ thể. – derobert
Tôi có thể làm gì với BẢNG HASH. Tôi chỉ có 5 trường và chỉ một trường là khóa chính (số di động). Hãy cho tôi một số ví dụ. – akashdeep
Tùy thuộc vào công cụ lưu trữ của bạn, quá trình này có thể mất nhiều thời gian. Tôi đã nhận thấy rằng với MYISAM nó đi nhanh hơn một chút. Tôi vừa thử nghiệm với cùng một tập dữ liệu chính xác và cuối cùng tôi đã đi với PostgreSQL vì nó mạnh mẽ hơn khi tải tệp. Innodb quá chậm nên tôi đã hủy bỏ nó sau hai giờ với cùng một tập dữ liệu kích thước nhưng nó là 10.000.000 bản ghi bởi 128 cột đầy dữ liệu.
Vì đây là danh sách trắng đang được cập nhật hàng ngày, điều này không có nghĩa là có một số lượng rất lớn các bản sao (sau ngày đầu tiên)? Nếu đây là trường hợp nó sẽ làm cho việc tải lên nhanh hơn rất nhiều để thực hiện một kịch bản lệnh đơn giản để kiểm tra xem bản ghi đã tồn tại chưa trước khi chèn nó.
Hãy thử truy vấn này:
$sql="LOAD DATA LOCAL INFILE '../upload/csvfile.csv'
INTO TABLE table_name FIELDS
TERMINATED BY ','
ENCLOSED BY ''
LINES TERMINATED BY '\n' "
Tôi đã nhận ra cùng một vấn đề và tìm ra một lối thoát. Bạn có thể kiểm tra quá trình tải lên tệp CSV lớn bằng AJAX.
- 1. xấp xỉ hàm lượng giác ngược
- 2. Khi nào sử dụng xấp xỉ so với xấp xỉ
- 3. Loại bỏ các bản ghi trùng lặp trong Bảng BigQuery
- 4. MySQL - Bảng trùng lặp
- 5. Xóa nhiều hàng trùng lặp trong bảng
- 6. Xóa bản ghi trùng lặp trong PostgreSQL
- 7. lỗi nhập trùng lặp mysql khi không có mục nhập trùng lặp (số lượng lớn tải qua php)
- 8. So sánh hai số xấp xỉ bằng
- 9. xấp xỉ log10 [x^k0 + k1]
- 10. Kiểm tra xem tệp CSV lớn (1m hàng) có cùng dữ liệu với bảng MySQL
- 11. MySQL chậm khi xóa các bản ghi trong bảng lớn
- 12. Xóa các hàng trùng lặp khỏi một tệp lớn trong Python
- 13. So sánh xấp xỉ e với Java
- 14. SQL: Xóa bản ghi trùng lặp trong SQL Server
- 15. Tải tệp CSV lớn lên cơ sở dữ liệu SQL Server
- 16. Tạo một bảng MySQL 150M hàng lớn
- 17. Tìm các chuỗi trùng lặp trong một tệp lớn
- 18. MySQL - Tham gia hai bảng không trùng lặp?
- 19. Tải lên tệp lớn
- 20. Decimal to approational fraction xấp xỉ
- 21. Xóa các hàng trùng lặp
- 22. Tìm bản ghi trùng lặp trong bảng theo nhiều tiêu chí
- 23. Tải lên tệp quá lớn
- 24. Tải lên tệp lớn với WebSocket
- 25. mysql GROUP_CONCAT trùng lặp
- 26. NHibernate Linq - Bản ghi trùng lặp
- 27. Cách phát hiện hàng trùng lặp trong bảng SQL Server?
- 28. Tải lên tệp lớn lên asp.net MVC
- 29. Tìm tất cả các bản ghi trùng lặp trong bảng SQL với Entity Framework
- 30. Tải lên các tệp lớn trong .NET
Trước tiên, bạn sẽ phải giải thích ký hiệu số mới này mà bạn đã đưa ra. – mowwwalker
có phải là một tỷ hay 10 triệu? – webbiedave
qua ajax sẽ chậm hơn. nếu bạn muốn các lệnh tải infile không mất quá nhiều thời gian, hãy chia nhỏ csv thành các phần nhỏ hơn. –