Bắt đầu với Node : Binary Data, Character Sets, and Encodings (Phần 6)
I.Binary data.
- Hiểu đơn giản là dữ liệu được lưu dưới dạng nhị phân thôi (lưu chỉ bởi 2 số 0 và 1)
số 0 và số 1 trong dữ liệu nhị phân được quy định bằng 1 bit
- Nhị phân ở đây nhị tức là 2 , dữ liệu chỉ được lưu dưới dạng 2 số.
- Hệ số chúng ta đang dùng hàng ngày là hệ thập phân dữ liệu được lưu dưới dạng 10 số.
Để hiểu đơn giản ví dụ như chúng ta muốn lưu một số hệ thập phân dưới dạng nhị phân
VD :
- Như chúng ta có thể thấy số 5 được biểu diễn dưới dạng nhị phân.
II.Character set.
- Là một đại diện của các kí tự số.
- Các bảng mã UNICODE hay ASCII
- Những bảng mã như UNICODE hay ASCII quy định kí tự nào được mã hóa như thế nào ?
Tại sao lại cần UNICODE hay ASCII chúng ta sử dụng dữ liệu nhị phân để lưu trong máy tính cơ mà bởi vì BinaryData không đủ để lưu tất cả các kí tự cần thiết dưới dạng nhị phân.
Character Encoding tức là chúng ta sử dụng bao nhiêu bit để lưu số đó , ví dự như trong hình chúng ta sử dụng chuẩn UTF8 tức là lưu bằng 8 bit cho mỗi số , càng nhiều bit càng lưu được nhiều kí tự
II.Mối liên hệ với JS.
- JS có thể xử lý khá tốt dữ liệu ở dạng chuỗi hay số như chuyển từ chuỗi thành số ...
- Nhưng JS chưa hỗ trợ nhiều khi làm việc với dữ liệu thô (dạng nhị phân)
Ở bài trước mình đã trình bày về luồng và bộ đệm , nhắc lại một tý rằng dữ liệu được gửi và được lưu vào trong bộ đệm để cho nó gửi tới bộ VSL , dự liệu lưu trong bộ đệm dưới dạng nhị phân
- Buffer là một Class trong có sẵn trong JS , vì JS không được thiết kế tốt để xử lý dữ liệu dạng nhị phân nhưng trong ES6 đã thay đổi
III.Chi tiết về luồng.
- Luồng là một chuỗi các dữ liệu , dữ liệu được chia thành các phần được gọi là khối (chunk)
- Chunk : Một phần của dữ liệu được gửi qua một luồng.
Như các mình đã trình bày về luồng và bộ đệm ở bài trước , vấn đề phát sinh là khi muốn xem video hay truyền tải thứ gì dung lượng lớn để máy tính (nói chung) đọc hết tệp và truyền tải thật sự rấ mất thời gian và không tối ưu về mặt hiệu suất , để giải quyết vấn đề này chúng ta có buffer và chunk ...dữ liệu sẽ được chia nhỏ ra từng phần gọi là chunk và nhét vào trong buffer , buffer di chuyển dọc theo luồng và cứ thế chia nhỏ dữ liệu cho đến khi hết nhưng điều này thì có liên quan gì đến NodeJS ????
- Khi bạn code Node hầu hết nhiệm vụ là code phía server , server tiếp nhận request gửi lên , nó iến hành đọc và ghi File và database liên tục , nếu xử lý vấn đề này không tốt sẽ ảnh hưởng về mặt hiệu suất làm giảm trải nghiệm người dùng.
- createReadFile vs readFile : trong node JS bạn có 2 lựa chọn để đọc file từ một tệp đó chúng là bằng 2 hàm trên , so sánh 2 hàm này bạn sẽ thấy được sự khác biệt khi dùng buffer và chunk vs không dùng.Bạn có thể thắc mắc 2 chức năng của hàm này giống nhau vậy thì sự khác biệt của nó là gì ???
- Đối vs fs.readFile bạn sẽ đọc toàn bộ tệp nói cách khác máy sẽ đọc toàn bộ tệp rồi nhét vào bộ đệm (buffer) trong trường hợp bạn chỉ đọc tệp vài kilobyte sử dụng 2 hàm này không có sự khác biệt lớn nhưng khi bạn tương tác với tệp dung lượng lớn vài trăm GB nó sẽ gây tràn bộ đệm do bộ đệm không đủ dung lượng chứa toàn bộ tệp.
- Đối với fs.createReadStream đơn giản nó chia data thành từng phần (chunk) rồi gửi vào bộ đệm , chú ý rằng bạn hoàn toàn có thể config kích thước của chunk này. Khi sử dụng fs.createReadStream client (nói riêng) hay đích đến của data (gửi trong local hoặc gửi qua internet) sẽ nhận được dữ liệu nhanh hơn
=> Thay vì sử dụng readFile hãy sử dụng createReadStream và theo dõi chi tiết cách data được truyền và nhận.
- Lưu ý rằng readStream hoạt động ngược lại so với writeStream (đọc từng phần vs ghi từng phần)
- Hiểu đơn giản là dữ liệu được lưu dưới dạng nhị phân thôi (lưu chỉ bởi 2 số 0 và 1)
số 0 và số 1 trong dữ liệu nhị phân được quy định bằng 1 bit
- Nhị phân ở đây nhị tức là 2 , dữ liệu chỉ được lưu dưới dạng 2 số.
- Hệ số chúng ta đang dùng hàng ngày là hệ thập phân dữ liệu được lưu dưới dạng 10 số.
Để hiểu đơn giản ví dụ như chúng ta muốn lưu một số hệ thập phân dưới dạng nhị phân
VD :
- Như chúng ta có thể thấy số 5 được biểu diễn dưới dạng nhị phân.
II.Character set.
- Là một đại diện của các kí tự số.
- Các bảng mã UNICODE hay ASCII
- Những bảng mã như UNICODE hay ASCII quy định kí tự nào được mã hóa như thế nào ?
Tại sao lại cần UNICODE hay ASCII chúng ta sử dụng dữ liệu nhị phân để lưu trong máy tính cơ mà bởi vì BinaryData không đủ để lưu tất cả các kí tự cần thiết dưới dạng nhị phân.
Character Encoding tức là chúng ta sử dụng bao nhiêu bit để lưu số đó , ví dự như trong hình chúng ta sử dụng chuẩn UTF8 tức là lưu bằng 8 bit cho mỗi số , càng nhiều bit càng lưu được nhiều kí tự
II.Mối liên hệ với JS.
- JS có thể xử lý khá tốt dữ liệu ở dạng chuỗi hay số như chuyển từ chuỗi thành số ...
- Nhưng JS chưa hỗ trợ nhiều khi làm việc với dữ liệu thô (dạng nhị phân)
Ở bài trước mình đã trình bày về luồng và bộ đệm , nhắc lại một tý rằng dữ liệu được gửi và được lưu vào trong bộ đệm để cho nó gửi tới bộ VSL , dự liệu lưu trong bộ đệm dưới dạng nhị phân
- Buffer là một Class trong có sẵn trong JS , vì JS không được thiết kế tốt để xử lý dữ liệu dạng nhị phân nhưng trong ES6 đã thay đổi
III.Chi tiết về luồng.
- Luồng là một chuỗi các dữ liệu , dữ liệu được chia thành các phần được gọi là khối (chunk)
- Chunk : Một phần của dữ liệu được gửi qua một luồng.
Như các mình đã trình bày về luồng và bộ đệm ở bài trước , vấn đề phát sinh là khi muốn xem video hay truyền tải thứ gì dung lượng lớn để máy tính (nói chung) đọc hết tệp và truyền tải thật sự rấ mất thời gian và không tối ưu về mặt hiệu suất , để giải quyết vấn đề này chúng ta có buffer và chunk ...dữ liệu sẽ được chia nhỏ ra từng phần gọi là chunk và nhét vào trong buffer , buffer di chuyển dọc theo luồng và cứ thế chia nhỏ dữ liệu cho đến khi hết nhưng điều này thì có liên quan gì đến NodeJS ????
- Khi bạn code Node hầu hết nhiệm vụ là code phía server , server tiếp nhận request gửi lên , nó iến hành đọc và ghi File và database liên tục , nếu xử lý vấn đề này không tốt sẽ ảnh hưởng về mặt hiệu suất làm giảm trải nghiệm người dùng.
- createReadFile vs readFile : trong node JS bạn có 2 lựa chọn để đọc file từ một tệp đó chúng là bằng 2 hàm trên , so sánh 2 hàm này bạn sẽ thấy được sự khác biệt khi dùng buffer và chunk vs không dùng.Bạn có thể thắc mắc 2 chức năng của hàm này giống nhau vậy thì sự khác biệt của nó là gì ???
- Đối vs fs.readFile bạn sẽ đọc toàn bộ tệp nói cách khác máy sẽ đọc toàn bộ tệp rồi nhét vào bộ đệm (buffer) trong trường hợp bạn chỉ đọc tệp vài kilobyte sử dụng 2 hàm này không có sự khác biệt lớn nhưng khi bạn tương tác với tệp dung lượng lớn vài trăm GB nó sẽ gây tràn bộ đệm do bộ đệm không đủ dung lượng chứa toàn bộ tệp.
- Đối với fs.createReadStream đơn giản nó chia data thành từng phần (chunk) rồi gửi vào bộ đệm , chú ý rằng bạn hoàn toàn có thể config kích thước của chunk này. Khi sử dụng fs.createReadStream client (nói riêng) hay đích đến của data (gửi trong local hoặc gửi qua internet) sẽ nhận được dữ liệu nhanh hơn
=> Thay vì sử dụng readFile hãy sử dụng createReadStream và theo dõi chi tiết cách data được truyền và nhận.
- Lưu ý rằng readStream hoạt động ngược lại so với writeStream (đọc từng phần vs ghi từng phần)

Nhận xét
Đăng nhận xét