Skip to content

add post java object serialization performance #62

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: master
Choose a base branch
from

Conversation

phanstasmal
Copy link

No description provided.

@nguquen nguquen requested review from kimkha and tycoi2005 October 28, 2022 04:24

## Objects Serialization performance

XML, JSON, và định dạng tương tự như text-based chúng rất hữu ích cho việc trao đổi dữ liệu giữa các hệ thống. Giữa các tiến trình trong Java, dữ liệu thường được trao đổi thông qua trạng thái tuần tự hoá của một đối tượng. Mặc dù nó được sử dụng rộng rãi trong Java, tuần tự hoá có 2 quan điểm quan trọng cần xem xét trong Java EE:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

với những thuật ngữ như "Serialization" thì nên để nguyên, vì dịch thành "tuần tự hóa" nghe rất xa lạ

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"XML, JSON, và định dạng tương tự như text-based chúng rất hữu ích cho việc trao đổi dữ liệu giữa các hệ thống"
< cần dịch thoát hơn cho đúng văn phong tiếng Việt, câu này đọc lên nghe rất gượng.

- EJB được gọi giữa các máy chủ Java EE - EJB gọi từ xa - Sử dụng tuần tự hoá để trao đổi dữ liệu
- Trạng thái phiên làm việc của giao thức HTTP được lưu thông qua tuần tự hoá đối tượng, điều này cho phép các phiên làm việc thông qua giao thức HTTP có tính khả dụng cao.

JDK cung cấp một cơ chế mặc định để tuần tự hoá các đối tượng thông qua triển khai giao diện Serializable hoặc giao diện Externalizable. Trên thực tế, hiệu suất tuần tự hoá của mọi đối tượng có thể được cải thiện từ tuần tự hoá mặc định, nhưng chắc chắn ngay từ đầu không phải là thời điểm thích hợp để thực hiện tối ưu tuần tự hoá. Mã code đặc biệt để serialize và deserialize sẽ tốn thời gian để viết, và Mã code sẽ khó bảo trì hợn so với cơ chế mặc định. Mã code tuần tự hoá cũng có thể phức tạp, vì vậy việc cố gắng tối ưu hoá nó sẽ làm tăng nguy cơ tạo ra mã code không chính xác.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"triển khai" = implement? với các thuật ngữ, keyword nên để tiếng anh, việc cố gắng dịch tất cả ra tiếng Việt mà người đọc ko hiểu thì cũng xem như ko thành công.

JDK cung cấp một cơ chế mặc định để tuần tự hoá các đối tượng thông qua triển khai giao diện Serializable hoặc giao diện Externalizable. Trên thực tế, hiệu suất tuần tự hoá của mọi đối tượng có thể được cải thiện từ tuần tự hoá mặc định, nhưng chắc chắn ngay từ đầu không phải là thời điểm thích hợp để thực hiện tối ưu tuần tự hoá. Mã code đặc biệt để serialize và deserialize sẽ tốn thời gian để viết, và Mã code sẽ khó bảo trì hợn so với cơ chế mặc định. Mã code tuần tự hoá cũng có thể phức tạp, vì vậy việc cố gắng tối ưu hoá nó sẽ làm tăng nguy cơ tạo ra mã code không chính xác.

### Transient Fields
Nói chung, cách để cải thiện chi phí tuần tự hoá đối tượng là tuần tự hoá ít dữ liệu nhất có thể. Điều này được thực hiện bằng cách đánh dấu các trường không cần thiết là tạm thời. Khi được đánh dấu tạm thời chúng sẽ không được tuần tự hoá theo mặc định. Sau đó, lớp có thể cung cấp các phương thức `writeObject()` và `readObject()` đặc biệt để xử lý dữ liệu đó.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tương tự, "tạm thời" = transient?


Khi mảng được giải mã bằng mã code trên, các tham chiếu JFK đó sẽ trở thành các đối tượng riêng biệt, khác nhau. Bây giờ khi một trong những đối tượng bị thay đổi, chỉ đối tượng đó bị thay đổi. Các đối tượng còn lại vẫn tham chiếu đên JFK.

Đây là một nguyên tắc quan trọng cần nhớ, bởi vì tối ưu tuần tự hoá thường là xử lý đặc biệt cho các tham chiếu đối tượng. Thực hiện chính xác có thể làm tăng đáng kể hiệu xuất, thực hiện không chính xác nó có thể phát sinh các lỗi khá tinh vi.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hiệu suất

}
}
```
Khi lịch sử của hàng tồn kho được xây dựng trên ký hiệu `s`, đối tượng được tạo và lưu trữ trên một bản đồ giá được sắp xếp theo ngày của tất cả các giá từ đầu đến cuối. Mã code cũng lưu lại ngày đầu tiên và ngày cuối cùng. Hàm tạo không điền vào bất kỳ một trường nào khác, chúng được tạo một cách lười biếng. Khi một getter trên bất kỳ trường nào được gọi, getter sẽ kiểm tra xem `needsCalc` có đúng không. Nếu có, nó sẽ tính toán các giá trị thích hợp cho tất cả các trường còn lại nếu cần (tất cả cùng một lúc).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"ký hiệu s" => chuỗi s
bản đồ giá? -> giữ nguyên Map cũng dc

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"chúng được tạo một cách lười biếng" ???

```
Khi lịch sử của hàng tồn kho được xây dựng trên ký hiệu `s`, đối tượng được tạo và lưu trữ trên một bản đồ giá được sắp xếp theo ngày của tất cả các giá từ đầu đến cuối. Mã code cũng lưu lại ngày đầu tiên và ngày cuối cùng. Hàm tạo không điền vào bất kỳ một trường nào khác, chúng được tạo một cách lười biếng. Khi một getter trên bất kỳ trường nào được gọi, getter sẽ kiểm tra xem `needsCalc` có đúng không. Nếu có, nó sẽ tính toán các giá trị thích hợp cho tất cả các trường còn lại nếu cần (tất cả cùng một lúc).

Tính toán này bao gồm việc tạo biểu đồ, ghi lại số ngày hàng tồn kho đóng lại ở một mức giá cụ thể. Biểu đồ chứa đựng cùng một dữ liệu ?(về đối tường `BigDecimal` và `Date`) như được tìm thấy trong bản đồ giá; nó chỉ là một cách nhìn khác về dữ liệu.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

biểu đồ là histogram?


Tính toán này bao gồm việc tạo biểu đồ, ghi lại số ngày hàng tồn kho đóng lại ở một mức giá cụ thể. Biểu đồ chứa đựng cùng một dữ liệu ?(về đối tường `BigDecimal` và `Date`) như được tìm thấy trong bản đồ giá; nó chỉ là một cách nhìn khác về dữ liệu.

Bởi vì tất cả các trường được khởi tạo một cách lười biếng có thể tính toán từ mảng giá, tất cả chúng có thể được đánh dấu tạm thời, và không cần thực hiện công việc đặc biệt nào để tuần tự hoá và giải mã chúng. Ví dụ này rất dễ dàng trong trường hợp này vì mã code đã thực hiện việc khởi tạo các trường một cách lười biếng; nó có thể lặp lại quá trình khởi tạo lười biếng đó khi nhận dữ liệu. Ngay cả khi mã code khởi tạo các trường này một cách hăng hái, nó vẫn có thể đành dấu bất kỳ trường được tính toán nào là tạm thời và tính toán lại giá trị của chúng trong phương thức `readObject()` của lớp.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

một cách hăng hái -> hơi khó hiểu

- Trạng thái phiên làm việc của giao thức HTTP được lưu thông qua tuần tự hoá đối tượng, điều này cho phép các phiên làm việc thông qua giao thức HTTP có tính khả dụng cao.
XML, JSON, và định dạng tương tự như text-based chúng rất hữu ích trong việc trao đổi dữ liệu giữa các hệ thống với nhau. Giữa các tiến trình trong Java, dữ liệu thường được trao đổi thông qua trạng thái `serialization` của một đối tượng. Mặc dù nó được sử dụng rộng rãi trong Java, `serialization` có 2 điểm quan trọng cần quan tâm trong Java EE:
- EJB được gọi giữa các máy chủ Java EE với nhau - EJB gọi từ xa - Sử dụng `serialization` để trao đổi dữ liệu
- Trạng thái HTTP session được lưu thông qua `serialization` của đối tượng, điều này làm cho các HTTP session có tính sẳn sàng cao.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sẳn sàng -> sẵn sàng


JDK cung cấp một cơ chế mặc định để tuần tự hoá các đối tượng thông qua triển khai giao diện Serializable hoặc giao diện Externalizable. Trên thực tế, hiệu suất tuần tự hoá của mọi đối tượng có thể được cải thiện từ tuần tự hoá mặc định, nhưng chắc chắn ngay từ đầu không phải là thời điểm thích hợp để thực hiện tối ưu tuần tự hoá. Mã code đặc biệt để serializedeserialize sẽ tốn thời gian để viết, và code sẽ khó bảo trì hợn so với cơ chế mặc định. Mã code tuần tự hoá cũng có thể phức tạp, vì vậy việc cố gắng tối ưu hoá nó sẽ làm tăng nguy cơ tạo ra mã code không chính xác.
JDK cung cấp một cơ chế mặc định để `serialization` các đối tượng thông qua implement giao diện `Serializable` hoặc giao diện `Externalizable`. Trên thực tế, hiệu suất của quá trình `serialization` đối với mọi đối tượng có thể được cải thiện từ mã code `serialization` mặc định, nhưng đây chắc chắn không phải là thời điểm khôn ngoàn để tối ưu hiệu xuất `serialization` sớm. Đoạn mã code đặc biệt để `serialization``deserialization` sẽ tốn thời gian để viết, và code đó cũng sẽ khó bảo trì hơn so với mã code `serilization` mặc định. Mã code `serialization` cũng có thể phức tạp, vì vậy việc cố gắng tối ưu hoá nó sẽ làm tăng nguy cơ tạo ra bug.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

khôn ngoàn: khôn ngoan

@@ -106,29 +106,29 @@ public class StockPriceHistoryImpl implements StockPriceHistory {
}
}
```
Khi lịch sử của hàng tồn kho được xây dựng trên ký hiệu `s`, đối tượng được tạo và lưu trữ trên một bản đồ giá được sắp xếp theo ngày của tất cả các giá từ đầu đến cuối. Mã code cũng lưu lại ngày đầu tiên và ngày cuối cùng. Hàm tạo không điền vào bất kỳ một trường nào khác, chúng được tạo một cách lười biếng. Khi một getter trên bất kỳ trường nào được gọi, getter sẽ kiểm tra xem `needsCalc` có đúng không. Nếu có, nó sẽ tính toán các giá trị thích hợp cho tất cả các trường còn lại nếu cần (tất cả cùng một lúc).
Khi lịch sử của hàng tồn kho được xây dựng trên ký hiệu `s`, đối tượng được tạo và lưu trữ trên một bản đồ giá được sắp xếp theo ngày của tất cả các giá từ đầu đến cuối. Mã code cũng lưu lại ngày đầu tiên và ngày cuối cùng. Hàm tạo không điền vào bất kỳ một trường nào khác, chúng được khởi tạo theo kiểu `lazy`. Khi một `getter` trên bất kỳ trường nào được gọi, `getter` sẽ kiểm tra xem `needsCalc` có đúng không. Nếu có, nó sẽ tính toán các giá trị thích hợp cho tất cả các trường còn lại nếu cần (tất cả cùng một lúc).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hàng tồn kho là chi?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stock Price là giá cổ phiếu


Tính toán này bao gồm việc tạo biểu đồ, ghi lại số ngày hàng tồn kho đóng lại ở một mức giá cụ thể. Biểu đồ chứa đựng cùng một dữ liệu ?(về đối tường `BigDecimal` và `Date`) như được tìm thấy trong bản đồ giá; nó chỉ là một cách nhìn khác về dữ liệu.
Tính toán này bao gồm việc tạo biểu đồ, ghi lại số ngày hàng tồn kho được chốt ở một mức giá cụ thể. Biểu đồ chứa đựng cùng một dữ liệu (về đối tường `BigDecimal` và `Date`) như được tìm thấy trong bản đồ giá; nó chỉ là một cách nhìn khác về dữ liệu.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tương tự, hàng tồn kho

### Nén dữ liệu đã được tuần tự hoá
Điều này dẫn đến cách thứ 3 mà hiệu suất tuần tự hoá của mã code có thể được cải thiện: nén dữ liệu tuần tự hoá để truyền nhanh hơn qua mạng chậm. Trong lớp lịch sử hàng tồn kho, nó được thực hiện bằng cách nén bản đồ giá trong quá trình tuần tự hoá:
### Nén dữ liệu đã được serialization
Điều này dẫn đến cách thứ 3 mà hiệu suất `serialization` của mã code có thể được cải thiện: nén dữ liệu `serialization` để truyền nhanh hơn qua mạng chậm. Trong lớp lịch sử hàng tồn kho, nó được thực hiện bằng cách nén bản đồ giá trong quá trình `serialization`:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hàng tồn kho, ở đây để nguyên tiếng anh là StockPriceHistory đi, nó là tên class trong code, không cần dịch

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants