ตารางโพสต์ฟอรัมควรใช้ MyISAM หรือ InnoDB

สำหรับฟอรัม ฉันควรใช้ MyISAM หรือ InnoDB สำหรับตารางที่เก็บข้อความหรือไม่

ฉันรู้ว่า MyISAM รองรับการค้นหาข้อความแบบเต็ม ซึ่งฟังดูเหมือนเป็นสิ่งที่ควรทำ แต่ในขณะที่อ่าน ฉันกลับเจอประโยคที่น่าสับสนนี้

คุณควรใช้ InnoDB เมื่อธุรกรรมมีความสำคัญ เช่น ในสถานการณ์ที่มีการแทรก INSERT และ SELECT เช่น กระดานข้อความออนไลน์หรือฟอรัม

แต่สำหรับ "กระดานข้อความหรือฟอรั่มออนไลน์" ฉันจำเป็นต้องมีการค้นหาที่ดีจึงจะค้นหาข้อความของแต่ละโพสต์ได้ ดังนั้น การใช้ MyISAM จึงไม่สมเหตุสมผลกว่าหรือ ใครช่วยอธิบายสิ่งที่ใช้บ่อยที่สุดได้ไหม


person dave    schedule 03.10.2010    source แหล่งที่มา


คำตอบ (3)


โดยทั่วไปแล้ว สำหรับข้อมูลที่ไม่สำคัญ ฉันจะใช้ InnoDB ที่ปรับมาเพื่อความเร็ว (เช่น ฉันจะไม่ล้างบันทึกไบนารี่ในทุก ๆ การคอมมิต) ฉันจะใช้ MyISAM สำหรับสิ่งต่าง ๆ เช่น ตารางการบันทึกเท่านั้น

ตามที่คนอื่นๆ กล่าวไว้ คุณสามารถใช้ดัชนีการค้นหาภายนอกได้ หากคุณต้องการค้นหาข้อความแบบเต็ม พวกมันทรงพลังและเร็วกว่าของ MySQL

ส่วนเรื่องธุรกรรมก็ค่อนข้างจะโกหก คุณสามารถทำสิ่งเดียวกันกับ MyISAM ได้โดยการล็อคตารางสำหรับ WRITE หากคุณกำลังแทรกลงในตารางสามตารางเมื่อโพสต์ข้อความ คุณสามารถล็อกทั้งสามตารางสำหรับ WRITE และข้อมูลจะดูสอดคล้องกัน (สมมติว่า INSERTS ทั้งสามรายการสำเร็จ)

แต่ปัญหาคือคุณกำลังล็อคทั้งตาราง ซึ่งอาจชะลอการใช้งานพร้อมกันได้ ในความเป็นจริง นั่นคือหนึ่งในข้อได้เปรียบที่สำคัญของ InnoDB เหนือ MyISAM: มีการล็อกระดับแถว

กล่าวโดยย่อ: หากคุณไม่สามารถตั้งค่าตัวสร้างดัชนีภายนอกได้ และไซต์ของคุณไม่มีการรับส่งข้อมูลมากเกินไป MyISAM จะทำงานได้ดีแม้ว่าจะมีความแข็งแกร่งน้อยกว่าก็ตาม คุณสามารถจำลองความสอดคล้องของธุรกรรมได้ด้วยการล็อคตาราง (ฉันไม่ได้ตั้งใจจะทำให้ดูเหมือนว่าการล็อคโต๊ะนั้นเทียบเท่ากับการทำธุรกรรม)

มิฉะนั้น ฉันจะใช้ InnoDB กับบริการจัดทำดัชนีภายนอก

person Matthew    schedule 03.10.2010
comment
ฉันโพสต์คำถามที่นี่ซึ่งคุณอาจสนใจแสดงความคิดเห็นใน: stackoverflow.com/questions/3849028/how-to-flush-binary-logs - person dave; 03.10.2010

นอกเหนือจากโซลูชันการค้นหาข้อความแบบเต็มของ MySQL ซึ่งตามที่คุณระบุแล้วว่าต้องใช้เครื่องมือจัดเก็บข้อมูล MyISAM คุณยังอาจต้องการพิจารณาเครื่องมือค้นหาของบุคคลที่สามยอดนิยม Sphinx และ Apache Lucene ซึ่งคุณสามารถใช้ตาราง InnoDB ได้

คุณยังสามารถยึดติดกับโซลูชันของ MySQL และใช้พื้นที่เก็บข้อมูล InnoDB สำหรับตารางทั้งหมด ยกเว้นตารางเดียวที่จะเก็บ post_id และ text_body สมมติว่าคุณต้องการเพียงการค้นหาข้อความแบบเต็มสำหรับเนื้อหาของโพสต์ในฟอรัม

นอกจากนี้ โปรดทราบว่าแม้ว่าข้อบกพร่องที่สำคัญของ MyISAM คือการขาดการสนับสนุนธุรกรรม แต่ก็ยังมีประเด็นสำคัญอื่นๆ สำหรับระบบที่ใช้งานจริงเช่นกัน คุณอาจต้องการตรวจสอบบทความต่อไปนี้เพื่ออ่านเพิ่มเติม:

person Daniel Vassallo    schedule 03.10.2010
comment
และข้อขัดข้องที่ยาวนานของ MyISAM สามารถกู้คืนได้เมื่อมีข้อมูลขนาดใหญ่ (ซึ่งเป็นกรณีในฟอรัม) - person racetrack; 03.10.2010
comment
@racetrack คุณหมายถึง InnoDB ฟื้นตัวจากข้อขัดข้องได้เร็วกว่า MyISAM ใช่ไหม - person dave; 03.10.2010
comment
@dave เร็วกว่ามากหากไฟล์ข้อมูลมีขนาดใหญ่ MyISAM จำเป็นต้องสแกนและซ่อมแซม/สร้างดัชนีใหม่ทั้งหมด เมื่อ InnoDB กู้คืนโดยการเล่นไฟล์บันทึกซ้ำ - person racetrack; 03.10.2010

สำหรับข้อความจำนวนมาก ฉันจะใช้ InnoDB เพื่อจัดเก็บและ Sphinx เพื่อจัดทำดัชนี มันมีคุณสมบัติการค้นหามากกว่าที่มีอยู่ใน mysql

person Brad Mace    schedule 03.10.2010