Gần đây mình đang làm 1 website có db khá là phức tạp. Lượng data rất nhiều. Nguyên mysql mình export ra đã gần 3GB và vẫn còn đang tiếp tục cắm vps để cào. Mặc dù đã đánh indexs nhưng khi search vẫn rất chậm. Mình không hiểu do mình tối ưu mysql chưa tốt hay do hiệu năng của mysql nó như vậy. Cho hỏi ae ngoài mysql ra thì khi sử dụng php ae có dùng hệ csdl nào khác không. Và nếu có thì suggest cho mình với. Thanks you
Lâu nay mình vẫn dùng mysql thấy không vấn đề,không thấy database của bạn như nào thì khó mà tư vấn chính xác được.Nếu bảng đó không khóa ngoại gì có thể thử MySQL partitioning
Search kiểu như google thì mysql kém lắm. Lên tầm vài triệu records là bắt đầu thấy. Vấn đề là performance kém ko xảy ra với mọi truy vấn search mà thường chỉ thấy trong 2 trường hợp: - search mà số lượng record tìm thấy nhỏ hơn số lượng mình limit - số lượng records tìm thấy lớn thì sẽ paging —> các page càng về cuối càng chậm.
Mysql kết hợp với Elasticsearch được không anh. Em đang gặp vấn để về search khi lên đến vài triệu record như anh nói
ES dùng với db nào cũng tốt. Hiện tại em đang dùng db nào thì cứ dùng tiếp, ES chỉ là miếng bọc bên ngoài để truy vấn chứ nó không thay thế db. Anh vẫn xài Mysql vì anh có giải pháp riêng, nhưng chọn ES là cách tốt nhất cho mọi người.
Mình từng dùng Elastic search kèm mongodb, mình k quá chú trọng vào chất lượng kết quả nên k tối ưu cái đó, nhưng so sánh việc search của elastic với search fulltext của mongodb thì 2 điểm rất ưng là tốc độ search rất nhanh (luôn trả về kết quả), và không bị tốn nhiều tài nguyên (mongodb mình search rất lâu và nhiều record có thể full ram và sập db). Trong trường hợp trên Elastic là một db index lại toàn bộ db của mongodb (index phần mình muốn search thôi, trường hợp của mình là title bài viết). Sau đó query vào elastic để search và lấy về kết quả có kèm id của mongodb để trả về content khi cần.
bên mongodb nó phình to nhanh khủng khiếp được cái search khá nhanh. vẫn chung thành mysql hay mariadb
Tùy thuộc vào giải pháp chứ với mình thấy mysql là đủ dùng rồi. Nên ưu tiên sử dụng index và tìm kiếm các giải pháp để chỉ cần sử dụng mỗi 1 DB thì đỡ rắc rối
Cám ơn cụ đã giúp e có thêm động lực. E cũng đang đi theo hướng này vì chuyển csdl bây giờ phí mất mấy tháng cào data của e
Mysql mà lên đến tầm vài chục gb data và cỡ 20tr records mà cho search thì có index kiểu gì cũng chậm (nếu rơi vào mấy trường hợp đã nói)
mình dùng mariadb. db khoảng 3 triệu records, 10GB. cũng đánh index, fulltext serach nhưng thêm limit, lọc keyword trước khi đưa vào filed nên dữ diệu trả về cũng nhanh.
Lọc keyword trước khi đưa vào field là sao bác. Vị dụ bài báo tên "xe container vượt đèn đỏ tông gần chết hơn 20 người" thì bác lọc ra key list key là: xe contaner, vượt đèn đỏ, đèn đỏ, đèn đỏ tông, tông gần chết, 20 người rồi đánh index mấy cái này à . Mà sau 1 ngày trời nghiên cứu elastic search thấy lằng nhằng quá nên tạm thời chuyển sang sphinx. Thấy cũng mượt hơn nhưng bị cái limit 4GB chưa biết tương lai sẽ ra sao
bỏ ký tự đặc biệt để cuối cùng keyword là thuần text, giới hạn số từ cần tìm kiếm vd "xe container vượt đèn" xong rồi limit lấy ra 10 kết quả, khỏi pagination,... bla bla
Èo, cách đó cũng đỡ 1 phần giai đoạn đầu thôi. Content lên tầm 6 triệu record data khoảng 40GB là căng à nha.
Tại sao với đống content đó cụ không chia nhỏ thành 6 sites . Để mỗi site còn 1 triệu records. Và 1 sites đó lại chia nhỏ thành 10 sites con. Mỗi site còn 100k records. Thế là ngon. Được 60 sites với cái db ban đầu
Sao amazon hay mấy site truyện phim nó không làm như vậy mà nó dồn cả đống thể loại vào 1 site chi vậy cụ nhỉ. Chắc em cũng vô tình giống tụi nó