Haruskah tabel posting forum menggunakan MyISAM atau InnoDB

Untuk forum, haruskah saya menggunakan MyISAM atau InnoDB untuk tabel yang menyimpan teks?

Saya tahu bahwa MyISAM mendukung penelusuran teks lengkap, yang sepertinya itulah yang harus saya lakukan, namun saat membaca, saya menemukan kalimat yang sangat membingungkan ini.

Anda harus menggunakan InnoDB ketika transaksi penting, misalnya untuk situasi di mana INSERT dan SELECT disisipkan, seperti papan pesan atau forum online.

Ya, tapi untuk "papan pesan atau forum online" saya memerlukan pencarian yang bagus untuk mencari teks di setiap postingan, jadi bukankah lebih masuk akal menggunakan MyISAM? Bisakah seseorang menjelaskan apa yang paling umum digunakan?


person dave    schedule 03.10.2010    source sumber


Jawaban (3)


Secara umum, untuk data yang tidak penting, saya akan menggunakan InnoDB yang disesuaikan dengan kecepatannya. (Misalnya, saya tidak akan menghapus log biner pada setiap komit.) Saya hanya menggunakan MyISAM untuk hal-hal seperti tabel logging.

Seperti yang disebutkan orang lain, Anda dapat menggunakan indeks pencarian eksternal jika Anda perlu melakukan pencarian teks lengkap. Mereka lebih kuat dan lebih cepat daripada MySQL.

Kalau soal transaksi, agak bohong. Anda dapat melakukan hal yang sama dengan MyISAM dengan mengunci tabel untuk WRITE. Jika Anda memasukkan ke dalam, katakanlah, tiga tabel saat memposting pesan, Anda dapat mengunci ketiga tabel untuk MENULIS, dan data akan terlihat konsisten (dengan asumsi ketiga INSERTS berhasil).

Namun masalahnya adalah Anda mengunci seluruh tabel, yang dapat memperlambat penggunaan secara bersamaan. Faktanya, itulah salah satu keunggulan utama InnoDB dibandingkan MyISAM: ia memiliki penguncian tingkat baris.

Singkatnya: jika Anda tidak dapat menyiapkan pengindeks eksternal, dan situs Anda tidak mengalami terlalu banyak lalu lintas, maka MyISAM akan berfungsi dengan baik meskipun kurang kuat. Anda dapat meniru konsistensi transaksi dengan kunci meja. (Saya tidak bermaksud membuatnya terdengar seolah-olah penguncian meja setara dengan transaksi.)

Kalau tidak, saya akan menggunakan InnoDB dengan layanan pengindeksan eksternal.

person Matthew    schedule 03.10.2010
comment
Saya memposting pertanyaan di sini yang mungkin menarik untuk Anda komentari: stackoverflow.com/questions/3849028/how-to-flush-binary-logs - person dave; 03.10.2010

Selain solusi pencarian teks lengkap asli MySQL, yang seperti telah Anda identifikasi memerlukan mesin penyimpanan MyISAM, Anda mungkin juga ingin mempertimbangkan mesin pencari pihak ketiga yang populer Sphinx dan Apache Lucene, yang dengannya Anda dapat menggunakan tabel InnoDB.

Anda juga dapat tetap menggunakan solusi MySQL, dan menggunakan penyimpanan InnoDB untuk semua tabel kecuali satu tabel yang hanya akan menampung post_id dan text_body. Ini dengan asumsi bahwa Anda hanya memerlukan pencarian teks lengkap untuk konten postingan forum.

Selain itu, meskipun kelemahan utama MyISAM adalah kurangnya dukungan transaksi, ada masalah penting lainnya juga pada sistem produksi. Anda mungkin ingin memeriksa artikel berikut untuk bacaan lebih lanjut:

person Daniel Vassallo    schedule 03.10.2010
comment
Dan pemulihan kerusakan MyISAM yang lama ketika datanya besar (seperti yang terjadi di forum). - person racetrack; 03.10.2010
comment
@racetrack, Maksud Anda InnoDB pulih dari kerusakan lebih cepat dari MyISAM? - person dave; 03.10.2010
comment
@dave Jauh lebih cepat jika file datanya besar. MyISAM perlu memindai sepenuhnya, dan memperbaiki/membangun kembali indeks, ketika InnoDB pulih dengan memutar ulang file log. - person racetrack; 03.10.2010

Untuk teks bervolume besar, saya akan menggunakan InnoDB untuk menyimpannya dan Sphinx untuk mengindeksnya. Ini menyediakan lebih banyak fitur pencarian daripada yang ada di mysql.

person Brad Mace    schedule 03.10.2010