2012-01-05 20 views
8

Tôi hiện đang nghiên cứu về những cách tốt nhất để cung cấp tìm kiếm nâng cao cho dự án php của tôi.Tìm kiếm Mysql - InnoDB và giao dịch so với MyISAM cho tìm kiếm toàn văn

Tôi đã thu hẹp nó xuống để sử dụng tìm kiếm FULLTEXT thay vì sử dụng LIKE để tìm các chuỗi phù hợp trong một hàng của bảng. Tuy nhiên, để làm điều này nó xuất hiện tôi cần phải hy sinh bằng cách sử dụng động cơ InnoDB mà sẽ làm cho tôi mất ACIDity của các giao dịch và các mối quan hệ bảng.

Có thực sự đáng giá khi sử dụng công cụ mysql MYISAM hoặc có cách nào tốt hơn để cung cấp chức năng tìm kiếm.

Mọi con trỏ sẽ được đánh giá cao!

Trả lời

7

Nó thực sự phụ thuộc vào ứng dụng ... Sử dụng MyISAM cho bất kỳ thứ gì cần tính toàn vẹn tham chiếu là lỗi ngay lập tức. Đồng thời, tìm kiếm văn bản không phải là tất cả hiệu quả.

Về cơ bản, có hai cách để thực hiện. Nếu bạn thấy mình không cần tính toàn vẹn tham chiếu đúng, hãy xem xét kho dữ liệu NoSQL. MongoDB là cơ sở dữ liệu lưu trữ tài liệu tuyệt vời.

Nếu, mặt khác, bạn thực sự cần toàn vẹn tham chiếu, nhưng cũng cần tìm kiếm toàn văn nhanh, được lập chỉ mục, bạn có thể làm tốt hơn để sử dụng Sphinx hoặc Apache Solr để tạo bộ nhớ cache được lập chỉ mục cho tìm kiếm toàn văn.

Dù bằng cách nào, tôi coi MyISAM là kho dữ liệu kế thừa. Tôi sẽ không sử dụng nó trên một dự án mới. YMMV.

+4

dính với InnoDB và làm điều gì đó như thế này cho đến khi thực hiện sẽ trở thành một vấn đề trong trường hợp chuyển sang Sphinx http://stackoverflow.com/questions/4732067/complex-query-for-recreating-fulltext -search-effect-on-innodb/4732982 # 4732982. Nếu bạn cho rằng myisam đọc tốt hơn http://stackoverflow.com/questions/4419499/mysql-nosql-help-me-to-choose-the-right-one-on-a/4421601#4421601 này –

3

MyISAM có một số nhược điểm - thiếu hỗ trợ giao dịch, khóa cấp bảng làm cho nó rất chậm trong loại tải đọc + ghi nặng. Một sự bất tiện khác của các bảng MyISAM - chúng không bị hỏng do đó bạn có thể mất một số dữ liệu trong trường hợp tắt máy bất ngờ hoặc mất điện trên máy chủ. Tuy nhiên MyISAM là rất nhanh trên một số truy vấn.

Về tìm kiếm toàn văn, tôi khuyên bạn nên sử dụng công cụ tìm kiếm bên ngoài InnoDB + như Lucene hoặc Sphinx để bạn có thể hưởng lợi từ cả công cụ lưu trữ an toàn và đáng tin cậy cũng như truy vấn toàn văn nhanh.

Đối với khởi đầu nhanh chóng với InnoDB và Sphinx bạn có thể tham khảo http://astellar.com/2011/12/replacing-mysql-full-text-search-with-sphinx/