Patrick kira-kira benar, tetapi inilah sebabnya. Cara Anda menyalin file di bawah UNIX berfungsi seperti ini:
- Cobalah untuk membaca beberapa (lebih) byte dari
fileA
.
- Jika kami gagal mendapatkan byte karena kami berada di (atau melewati) akhir file, kami selesai; berhenti.
- Kalau tidak, tulis byte ke
fileB
dan loop kembali ke langkah 1.
Mengetahui hal itu, dan mengetahuinya sesederhana itu, mari kita lihat beberapa kasing sudut.
Segera setelah kami menemukan akhir file, salinan selesai. Jadi misalkan file kita bertambah selama salin, tetapi tumbuh lebih lambat daripada kita menyalinnya. Program penyalinan akan terus melampaui ukuran file asli, karena pada saat ia sampai di sana, ada lebih banyak file. Tetapi pada beberapa titik, ia mengejar dengan akhir file, dan ia tahu itu pada akhirnya karena tidak dapat membaca byte lagi sekarang . Jadi itu berhenti di sana, bahkan jika file tersebut akan tumbuh lebih lanjut.
Jika file tersebut terpotong, program salin mengatakan "Wah, saya melewati akhir file!" dan berhenti.
Dan jika potongan-potongan file diperbarui secara acak oleh, katakanlah, program database :-), maka salinan Anda akan menjadi campuran dari data lama dan baru, karena data tidak semuanya disalin pada saat yang bersamaan. Hasilnya mungkin akan menjadi salinan yang rusak, itulah sebabnya itu umumnya bukan ide yang baik untuk membuat salinan dari database hidup.
(Yang mengatakan, saya tidak terbiasa dengan CouchDB, dan dimungkinkan untuk merancang basis data agar tahan terhadap korupsi semacam ini. Tetapi yang terbaik adalah benar-benar yakin.)