Mengunci file sqlite pada sistem file NFS mungkin?

Katakanlah ada dua skrip python yang ingin menulis data ke tabel yang sama yang disimpan dalam file SQLite menggunakan modul sqlite3. File SQLite disimpan pada sistem file NFS. Di SQLite-FAQ saya membaca:

SQLite menggunakan kunci pembaca/penulis untuk mengontrol akses ke database. [...] Namun berhati-hatilah: mekanisme penguncian ini mungkin tidak berfungsi dengan benar jika file database disimpan pada sistem file NFS. Hal ini karena penguncian file fcntl() rusak pada banyak implementasi NFS. Anda harus menghindari meletakkan file database SQLite di NFS jika beberapa proses mungkin mencoba mengakses file secara bersamaan.

Apakah ini berarti proses tersebut tidak mungkin dilakukan sama sekali atau adakah cara untuk memastikan bahwa satu proses menunggu hingga proses lainnya selesai?

INSERT tidak rumit. Hanya beberapa:

INSERT_STATEMENT = "INSERT INTO some_table (row, col, val) VALUES (?, ?, ?)"
connection.executemany(INSERT_STATEMENT, triples)

Dan himpunan yang disisipkan terputus-putus.

Pertanyaan lebih lanjut: Apakah Masalah NFS terjadi ketika dua proses mencoba menulis ke tabel yang sama atau ketika mereka mencoba menulis ke database yang sama (yang berupa file)? Apakah solusinya adalah membiarkan setiap proses membuat tabelnya sendiri di database (file) yang sama dan menulis ke sana?


person Aufwind    schedule 28.03.2012    source sumber


Jawaban (1)


Jangan gunakan SQLite dengan NFS. Sesederhana itu. Semantik NFS berbeda dari sistem file biasa dan lebih longgar. Anda akhirnya akan mendapatkan korupsi. Sesekali seseorang di milis pengguna SQLite memposting "solusi" mereka. Mereka tidak pernah berhasil meskipun tampaknya hanya dalam jangka pendek.

person Roger Binns    schedule 01.04.2012
comment
Sayangnya saya harus menggunakan SQLite. Saya akhirnya memberikan setiap proses filenya sendiri untuk ditulis, dan menggabungkan skrip setelahnya. Tapi terima kasih atas jawaban Anda! :-) - person Aufwind; 02.04.2012
comment
Ketika Anda akhirnya mengalami kerusakan, pastikan untuk menyebutkan bahwa Anda menggunakan NFS. Dan jangan kaget bila respon dari semua orang adalah jangan lakukan itu. - person Roger Binns; 03.04.2012
comment
jangan lakukan itu, meskipun satu proses akan mengakses file tersebut? - person ; 14.05.2014
comment
Anda memerlukan kode dan proses yang sempurna untuk benar-benar yakin bahwa dalam keadaan apa pun tidak ada akses bersamaan. Jika Anda pernah gagal mencapai kesempurnaan, Anda akan terkena kerusakan tanpa disadari yang pada akhirnya akan terlambat Anda sadari. - person Roger Binns; 14.05.2014