[Hỏi] mysql ngốn CPU quá nhiều, phải làm sao để giảm?

Discussion in 'Hỏi Đáp Kỹ Thuật' started by Nai, May 16, 2019.

  1. Nai

    Nai MiddleMan Staff Member

    VÌ lúc trước em mới index thì mới được tầm khoảng gần 2GB thì báo lỗi file index ko vượt quá 4GB hay 4,5 GB gì ấy. Sau đó em có search thì một số người có cùng trường hợp và cũng được tư vấn là limit của sphinx.
    Nhưng em lúc đó thì chỉ gần nửa cái limit 4GB nên ko quan tâm nhiều vì còn lâu mới tới con số đó, với tình hình hiện tại chắc khó đạt được nên cũng chưa quan tâm nốt.
    Để em theo dõi lại. Nếu được nhiều hơn con số đó nữa thì quá tốt.

    Lỗi của nó khi index dạng thế này
    "ERROR: index 'sampleIndex': too many string attributes (current index format allows up to
    4 GB).
    t"
     
  2. Tài Nguyễn

    Tài Nguyễn Khách Qua Đường

    Truy vấn theo key như này bác dùng redis đi.
     
  3. Dung Vuong

    Dung Vuong Sơ Nhập Giang Hồ

    sphinx với ES giống giống nhau à các pro. Mình chưa mò thử cái này bao giờ {angry}
     
  4. princenuce

    princenuce Sơ Nhập Giang Hồ

    bạn thử hash các tag sang md5 rồi cho nó index column hash, sau đó khi query cứ đè thằng hash này mà search sẽ ổn thôi
     
    Vito_King likes this.
  5. Nai

    Nai MiddleMan Staff Member

    Làm như vậy có ưu điểm gì bác?
     
    princenuce likes this.
  6. Nai

    Nai MiddleMan Staff Member

    ES thấy ngon hơn sphinx nhiều đó bác :D, mà thấy khó cấu hình nên chưa dùng tới.
     
  7. Nai

    Nai MiddleMan Staff Member

    Redis thì phải cấu hình theo cho code mỗi khi lên web nữa. Site nhiều lắm mà lác đác à, làm vậy hơi cực. Khi nào có site khủng mới cần làm chi tiết như vậy.
     
  8. princenuce

    princenuce Sơ Nhập Giang Hồ

    Bạn thử ngĩ xem 1 đoạn tag dài loằng ngoằng khi được mã hóa thành 1 đoạn ngắn hơn và unique thì bạn ngĩ index cái nào hiệu quả hơn.
    - Khi thêm tag mới bạn cũng nên kiểm tra đã tồn tại tag trong db hay chưa bằng cách check thằng hash
    - Nếu bạn có 2 bảng product và 1 bảng tag thì nên tạo thêm 1 bảng product_tag, nó là bảng trung gian liên kết 2 thằng đó lại, tránh dư thừa dữ liệu
    - Caching lại product detail bằng redis hoặc cái gì đó, nếu có bất cứ thay đổi nào (VD thêm tag, update bài mới thì ngay lập tức xóa cache đi để nó cache lại)
    - Nên cache từng phần của page nếu có thể, ví dụ như article cache riêng, sidebar cache riêng, ... các thành phần như sidebar bạn có thê đặt cronjob để nó cache lại theo 1 tg định sẵn nào đó, ví dụ 5-10s, bạn ko nên để kệ mẹ nó, tức là ng dùng vào nếu chưa cache hoặc quá thời gian sẽ cache lại (Cái này user online đông là sấp mặt đó)
    - Mục search bạn cũng nên làm điều tương tự, thông thường các mục này bạn cache khaongr 1-2 tiếng đến 1-2 ngày không vấn đề.
    ...... còn nhiều nữa nhưng đây chỉ là 1 vài thủ thuật tối ưu web mà mình đang dùng, hi vọng giúp được bạn
    T thì quan điểm cái gì cache được mà không ảnh hưởng nhiều đến trải ngiệm người dùng là cache hết :3
     
    Vito_King and Nai like this.
  9. sincos

    sincos Bang Chúng

    Vụ hash key là cực kỳ rủi ro nhé. Ai đảm bảo nó unique.
     
  10. money

    money Hương Chủ

    Sphinx hay ES là để làm Search Engine chứ hash như này query kiểu like là chết ngắc.
     
  11. Nai

    Nai MiddleMan Staff Member

    1. À, nếu hash ngắn hơn thì index sẽ nhẹ bớt, nhưng search có còn ổn không, cái này bác cho ý kiến chứ mình chưa dùng kiểu này bao giờ. Vì nếu name có 10 ký tự, mình search ko ra thì có thể cắt bớt còn 5 6 ký tự để searh tiếp, còn hash rồi thì có cách nào cắt được ko?
    2. Vụ tránh dư thừa dữ liệu ở đây mình chưa hiểu lắm vì thêm 1 bảng pro_tag là mình thấy dư rồi. Mình chỉ dùng bảng product_category thôi. Tag thì mình ko dùng bảng này :D, vì nếu dùng mới nghĩ sẽ dư, nhưng mình nó cũng là 1 dạng cache trên mysql (mình chọn cache id ra file để giải quyết vấn đề này :D).
    3. Redis mình cũng đã từng nghĩ tới nhưng cấu hình hơi phức tạp, site mình nhỏ nhỏ thôi à nên mình thấy hơi tốn thời gian, khi nào site lớn rồi hẳn làm, vì mình nhiều site chứ ko phải site nhiều traffic nên ưu tiền cache ra file để dùng chung :D
    4. Cache ra từng phần thì mình vẫn đang dùng :).
    5. Search thì mình dùng chung với tag :D
    Cám ơn ý kiến của bạn, mình đang tò mò vụ hash hơn :D
     
  12. money

    money Hương Chủ

    @Nai ko có cái nào bằng ES cả. Các giải pháp khác chỉ là tạm bợ thôi.
     
    console likes this.
  13. Nai

    Nai MiddleMan Staff Member

    Em đồng ý 2 tay {surrender}
     
  14. Kiến Lửa

    Kiến Lửa Tân Thủ Thôn

    Fulltext Search dùng để gắn tag là làm ntn vậy bác @Nai ?
    Mình vẫn đang nghĩ theo cách thêm table product_tag, theo kiểu relationship many-to-may.
    Khi query product thì join lại sẽ có đc tags.
     
  15. Nai

    Nai MiddleMan Staff Member

    Là thay vì làm theo cái kiểu bác vừa nói (giống cat) thì mình lấy name của post/product search vô table tag để lấy dữ liệu ra. Thường thì tên product/post sẽ khá dài so với tag nên sẽ cần cắt bắt name khi search để kết quả ra cho nhiều.
    Cũng giống như page search, thay vì mình search post table thì mình search tag table
     
  16. Kiến Lửa

    Kiến Lửa Tân Thủ Thôn

    Không hiểu chổ này lắm bác.
    Ví dụ user search với keyword "iphone", thay vì mình sẽ search trong product table, thì bác search trong tag table. Và cho ra khoảng 10 tag như: "iphone 6", "iphone 7", ....
    Rồi bác show ra data là gì?
     
  17. console

    console Bang Chúng

    Improve skill dùng ES đi hông nghe haha. Sphinx bữa a có nói là dùm tạm giải quyết vấn đề full text search hôm bữa trc sau gì cũng xài ES moi ok dc. Ah mà thôi kiếm tiền trc đã :D
     
  18. Nai

    Nai MiddleMan Staff Member

    Lụm tiền trước đã. Đợi lụm nhiều rồi mua máy xúc {embarrassed}
     
  19. Nai

    Nai MiddleMan Staff Member

    Ý mình là show tag cũng giống show product.
    page search thì mình bỏ keyword rồi search trong table product, rồi show product ra.
    Còn show tag thì mình lấy tên product (giữ nguyên hoặc cắt bớt) search trong table tag rồi show tag ra.
     
    Kiến Lửa likes this.
  20. xmenvn2510

    xmenvn2510 Moderator + MiddleMan Staff Member

    @Nai : data to ghê. web khủng đây. Ah mà dạo này ko thấy lấy paypal hả e. hehe