@nguyenvancaoky Thường đánh giá thuật toán thì giả định ngữ cảnh là chạy nhiều lần, không phải chạy một lần nghỉ. Khi chạy nhiều sẽ giảm các yếu tố gây nhiễu như tính năng cache lệnh, cache data của CPU, thời gian thực thi 1 lần quá nhỏ bộ đếm time cũng kém chính xác, và bộc lộ ảnh hưởng từ việc tạo thêm Set như thời gian cấp phát bộ nhớ, xử lí trùng khi tạo Set.
pm2 bạn dùng để deploy code ở môi trường gốc, thì tương tự ta cũng có thể dùng pm2 để deploy app docker )
Thực ra mục đích chính mình dùng pm2 là vì, pm2 nó có cơ chế auto restart nếu nodejs failed to start + có log + logrotate + limit cpu + multiple process
Bạn có thể thắc mắc "ủa docker cũng có cơ chế auto restart nếu app failed rồi cần gì pm2, docker cũng có logs luôn..."
Với pm2 nếu app của các bạn failed thì ta có thể exec trực tiếp vào container và xem lỗi phía nodejs đang in ra là gì, còn bình thường nếu ko có nó, app failed -> docker restart container mình ko exec vào xem đc
pm2 có logs + logrotate -> ta có thể mount ra volume và lưu lại logs để monitor
việc có pm2 cũng như kiểu có thêm "1 lớp" để đảm bảo là app của chúng ta luôn được restart nếu có vấn đề gì xảy ra (chưa cần tới "lớp" docker bên ngoài )
Việc dùng pm2 sẽ làm cho deployment được đồng bộ, như bạn nói là bạn đang deploy môi trường gốc cũng dùng pm2, thì ví dụ sau này ta bỏ docker đi bạn muốn deploy thẳng vào môi trường gốc, thì cấu hình của ta vẫn đc giữ nguyên
Về đoạn npm install thì chắc có đoạn nào đó của bạn chưa đúng, để mình lấy cái pipeline lúc trước mình làm rồi share bạn
còn đoạn thứ 2 --cache-from nếu nó ko cache đc thì khả năng là đoạn pull image trước dđó nó ko pull đc gì nên nó ko có gì để cache cả, cái này mình sẽ check lại.
2 vấn đề trên mình sẽ demo ở 1 cái pipeline và share bạn để bạn có cái tham chiếu
@maitrungduc1410 Bác có thể lý giải vì sao lại dùng pm2 để chạy ứng dụng node trong docker container không? Mình mới chỉ biết pm2 hay dùng để deploy code chạy trực tiếp ở môi trường gốc thôi.
Cảm ơn góp ý của bạn . Vì bài viết cũng có khá nhiều khái niệm rồi nên mình nghĩ nên nói về tham chiếu và tham trị ở một bài viết khác cho rõ ràng hơn để mọi người dễ tiếp cận. Về tham chiếu và tham trị mình sẽ dẫn link cho mọi người tìm hiểu sau để hoàn thiện bài viết hơn.
@trondoibenemnd Cảm ơn bạn đã đọc bài chia sẻ của mình Để quy định các colums muốn đánh index trên elasticsearch bạn định nghĩa chúng ở method mapping trong Model tương ứng nhé ạ
Cho mình hỏi ngu xíu, hàm some và hàm includes trong js đều là duyệt mảng để tìm phần tử, vậy cách giải 2 bản chất vẫn là 2 vòng lặp lồng nhau, độ phức tạp O(N^2) chứ. Đúng là với trường hợp số phần tử nhỏ thế này thì code cho rõ ràng là ok, còn nếu mẫu rất lớn thì mình nghĩ cách giải là: chuyển mảng 1 thành Set trước -> lặp qua từng phần tử trong mảng 2 và xem phần tử đó có trong mảng 1 không, nếu có thì return true, lặp hết mảng 2 mà k có thì return false. Do Set thuộc dạng hash table nên việc tìm 1 phần tử trong Set là O(1), tổng kết thuật toán là O(N)
chắc bác chưa biết barebone - xương sống của mọi loại ngôn ngữ, chỉ gồm vòng lặp và phép tăng 1 (++). Cho dù Set có nhanh hơn thì bởi vì không chạy bằng vòng lặp của JS mà là vòng lặp của C++ (Java tuỳ engine) nên trông có vẻ nhanh hơn thôi.
THẢO LUẬN
@nguyenvancaoky Thường đánh giá thuật toán thì giả định ngữ cảnh là chạy nhiều lần, không phải chạy một lần nghỉ. Khi chạy nhiều sẽ giảm các yếu tố gây nhiễu như tính năng cache lệnh, cache data của CPU, thời gian thực thi 1 lần quá nhỏ bộ đếm time cũng kém chính xác, và bộc lộ ảnh hưởng từ việc tạo thêm Set như thời gian cấp phát bộ nhớ, xử lí trùng khi tạo Set.
@dhvan85 ???? mình chưa hiểu bạn thêm vòng lặp để làm gì :v
Hay quá ạ
@longvjp1992 Ơ bạn đã chạy code chưa đấy, ví dụ
'JavaScriptJava'.lastIndexOf('J')cũng không ra 0 được.@TrangHTT
Tại sao phải chạy querry thuần ?
@maitrungduc1410 cảm ơn bạn nhiều nhé
@maitrungduc1410 Thú vị phết
Cám ơn bạn đã giải đáp nhé.
pm2 bạn dùng để deploy code ở môi trường gốc, thì tương tự ta cũng có thể dùng pm2 để deploy app docker
)
Thực ra mục đích chính mình dùng pm2 là vì, pm2 nó có cơ chế auto restart nếu nodejs failed to start + có log + logrotate + limit cpu + multiple process
Bạn có thể thắc mắc "ủa docker cũng có cơ chế auto restart nếu app failed rồi cần gì pm2, docker cũng có logs luôn..."
hello bạn
--cache-fromnếu nó ko cache đc thì khả năng là đoạn pull image trước dđó nó ko pull đc gì nên nó ko có gì để cache cả, cái này mình sẽ check lại.2 vấn đề trên mình sẽ demo ở 1 cái pipeline và share bạn để bạn có cái tham chiếu
@maitrungduc1410 Bác có thể lý giải vì sao lại dùng pm2 để chạy ứng dụng node trong docker container không? Mình mới chỉ biết pm2 hay dùng để deploy code chạy trực tiếp ở môi trường gốc thôi.
Cảm ơn góp ý của bạn

. Vì bài viết cũng có khá nhiều khái niệm rồi nên mình nghĩ nên nói về tham chiếu và tham trị ở một bài viết khác cho rõ ràng hơn để mọi người dễ tiếp cận. Về tham chiếu và tham trị mình sẽ dẫn link cho mọi người tìm hiểu sau để hoàn thiện bài viết hơn.
@trondoibenemnd Cảm ơn bạn đã đọc bài chia sẻ của mình
Để quy định các colums muốn đánh index trên elasticsearch bạn định nghĩa chúng ở method mapping trong Model tương ứng nhé ạ
Tựa đề là bắt đầu với một ký tự cụ thể mà bạn chứ đâu phải là chuỗi ^^
Nghĩ đơn giản thôi các bác, lấy giao của 2 mảng là được
Oki nha

Cảm ơn bạn nhé

@devil_boom_129 chuẩn bác ơi, nó kiểu có nhiều khó cũ ý
nên nhiều khi nó chưa update bác ạ, cứ theo tài liệu của aws là được bác nhé
Cho mình hỏi ngu xíu, hàm some và hàm includes trong js đều là duyệt mảng để tìm phần tử, vậy cách giải 2 bản chất vẫn là 2 vòng lặp lồng nhau, độ phức tạp O(N^2) chứ. Đúng là với trường hợp số phần tử nhỏ thế này thì code cho rõ ràng là ok, còn nếu mẫu rất lớn thì mình nghĩ cách giải là: chuyển mảng 1 thành Set trước -> lặp qua từng phần tử trong mảng 2 và xem phần tử đó có trong mảng 1 không, nếu có thì return true, lặp hết mảng 2 mà k có thì return false. Do Set thuộc dạng hash table nên việc tìm 1 phần tử trong Set là O(1), tổng kết thuật toán là O(N)
chắc bác chưa biết barebone - xương sống của mọi loại ngôn ngữ, chỉ gồm vòng lặp và phép tăng 1 (++). Cho dù Set có nhanh hơn thì bởi vì không chạy bằng vòng lặp của JS mà là vòng lặp của C++ (Java tuỳ engine) nên trông có vẻ nhanh hơn thôi.