PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Viết một tệp bằng nhiều chuỗi

Tài nguyên được Chia sẻ ==Nội dung

Ghi vào một tệp bình thường theo định nghĩa là một hoạt động được tuần tự hóa. Bạn không đạt được hiệu suất bằng cách cố gắng ghi vào nó từ nhiều luồng, I / O là một tài nguyên bị giới hạn hữu hạn ở mức băng thông thấp hơn mức độ thậm chí là CPU chậm nhất hoặc quá tải nhất.

Truy cập đồng thời vào tài nguyên được chia sẻ có thể phức tạp (và chậm)

Nếu bạn có nhiều luồng đang thực hiện các phép tính tốn kém thì bạn có các tùy chọn, nếu bạn chỉ sử dụng nhiều luồng vì bạn nghĩ rằng bạn đang tăng tốc một cái gì đó, bạn sẽ làm ngược lại. Sự tranh giành I / O luôn làm chậm việc truy cập vào tài nguyên, nó không bao giờ tăng tốc độ vì khóa chờ đợi và các chi phí khác.

Bạn phải có một phần quan trọng được bảo vệ và chỉ cho phép một người viết duy nhất tại một thời điểm. Chỉ cần tra cứu mã nguồn của bất kỳ trình ghi nhật ký nào hỗ trợ đồng thời và bạn sẽ thấy rằng chỉ có một luồng duy nhất ghi vào tệp.

Nếu ứng dụng của bạn chủ yếu là:

  1. Giới hạn CPU: Bạn có thể sử dụng một số cơ chế khóa / cấu trúc dữ liệu để chỉ cho phép một luồng trong số nhiều luồng ghi vào tệp cùng một lúc, điều này sẽ vô dụng từ quan điểm đồng thời như một giải pháp đơn giản; Nếu các luồng này bị ràng buộc bởi CPU với ít I / O thì điều này có thể hoạt động.

  2. I / O Bound: Đây là trường hợp phổ biến nhất, bạn phải sử dụng hệ thống truyền thông điệp với một hàng đợi của một số loại và có tất cả các luồng đăng vào hàng đợi / bộ đệm và có một luồng duy nhất kéo từ nó và ghi vào tệp. Đây sẽ là giải pháp dễ mở rộng nhất và dễ thực hiện nhất.

Ghi nhật ký - Viết không đồng bộ

Nếu bạn cần tạo một tệp siêu lớn duy nhất mà thứ tự ghi không quan trọng và chương trình bị ràng buộc bởi CPU, bạn có thể sử dụng kỹ thuật ghi nhật ký.

Có mỗi process ghi vào một tệp riêng biệt và sau đó nối nhiều tệp thành một tệp lớn ở cuối. Đây là một trường học rất lâu đời công nghệ thấp giải pháp hoạt động tốt và có trong nhiều thập kỷ.

Rõ ràng là bạn có càng nhiều I / O dung lượng lưu trữ thì điều này sẽ hoạt động tốt hơn trên end concat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. postgreSQL - trong so với bất kỳ

  2. Kết nối với cơ sở dữ liệu PostgreSql từ xa bằng Powershell

  3. Sử dụng psql's \ copy cho truy vấn nhiều dòng

  4. Kết hợp hai cột và thêm vào một cột mới

  5. Có phím tắt nào cho SELECT * FROM không?