PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Menulis file menggunakan banyak utas

Sumber Daya Bersama ==Pertentangan

Menulis ke file normal menurut definisi adalah operasi serial. Anda tidak mendapatkan kinerja dengan mencoba menulisnya dari beberapa utas, I/O adalah sumber daya terbatas yang terbatas pada urutan bandwidth yang lebih kecil daripada CPU yang paling lambat atau paling kelebihan beban.

Akses bersamaan ke sumber daya bersama dapat menjadi rumit ( dan lambat )

Jika Anda memiliki banyak utas yang melakukan perhitungan mahal maka Anda memiliki opsi, jika Anda hanya menggunakan banyak utas karena Anda pikir Anda akan mempercepat sesuatu, Anda hanya akan melakukan yang sebaliknya. Perselisihan untuk I/O selalu memperlambat akses ke sumber daya, tidak pernah mempercepatnya karena penguncian menunggu dan overhead lainnya.

Anda harus memiliki bagian kritis yang dilindungi dan hanya mengizinkan satu penulis pada satu waktu. Cari saja kode sumber untuk setiap penulis logging yang mendukung konkurensi dan Anda akan melihat bahwa hanya ada satu utas yang menulis ke file.

Jika aplikasi Anda terutama:

  1. CPU Terikat: Anda dapat menggunakan beberapa mekanisme penguncian/konstruk data untuk hanya membiarkan satu utas dari banyak menulis ke file pada satu waktu, yang tidak akan berguna dari sudut pandang konkurensi sebagai solusi naif; Jika utas ini terikat CPU dengan sedikit I/O, ini mungkin berhasil.

  2. I/O Terikat: Ini adalah kasus yang paling umum, Anda harus menggunakan sistem pengiriman pesan dengan semacam antrian dan memiliki semua utas yang diposkan ke antrean/penyangga dan memiliki satu utas yang ditarik darinya dan menulis ke file. Ini akan menjadi solusi yang paling terukur dan paling mudah diterapkan.

Penjurnalan - Penulisan Asinkron

Jika Anda perlu membuat satu file super besar di mana urutan penulisan tidak penting dan program terikat CPU, Anda dapat menggunakan teknik penjurnalan.

Miliki setiap process tulis ke file terpisah dan kemudian gabungkan beberapa file menjadi satu file besar di akhir. Ini adalah sekolah yang sangat tua berteknologi rendah solusi yang bekerja dengan baik dan telah berlangsung selama beberapa dekade.

Jelas, semakin banyak I/O penyimpanan yang Anda miliki, semakin baik kinerjanya pada akhirnya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SpringBoot+Kotlin+Postgres dan JSONB:org.hibernate.MappingException:Tidak ada pemetaan Dialek untuk tipe JDBC

  2. SQL pilih elemen di mana jumlah bidang kurang dari N

  3. Perbaiki “ERROR:  missing FROM-clause entry for table” di PostgreSQL saat menggunakan UNION, EXCEPT, atau INTERSECT

  4. Django:Grup Kueri Berdasarkan Bulan

  5. Cara mencadangkan dan memulihkan database PostgreSQL