Đặt tên tài liệu để tránh các vấn đề liên quan đến tabSeries
Tài liệu ERPNext tiếng Việt: Đặt tên tài liệu để tránh các vấn đề liên quan đến tabSeries
Bản dịch máy từ tài liệu ERPNext chính thức. Chưa được rà soát toàn văn về thuật ngữ chuyên ngành. Cần đối chiếu bản gốc khi áp dụng nghiệp vụ.
Khi bạn lưu một tài liệu trong ERPNext như hóa đơn bán hàng, Phiếu nhập kho, các khoản thanh toán, hoặc bất kỳ thứ gì có số tự động tạo, hệ thống phải xác định số tiếp theo trong trình tự (ví dụ: 0001, 0002, 0003, v.v.).
Để đảm bảo hai tài liệu không bao giờ trùng số, ERPNext duy trì một bộ đếm cho mỗi chuỗi đặt tên trong một bảng gọi là tabSeries. Trước khi cấp số tiếp theo, hệ thống khóa bộ đếm đó để không ai khác có thể truy cập, cộng thêm 1, sau đó mở khóa. Việc này diễn ra trong tích tắc, nên thông thường bạn sẽ không nhận thấy.
Nếu hàng trăm tài liệu được tạo cùng lúc và đều sử dụng chung một chuỗi đặt tên, tất cả chúng đều cần cùng một bộ đếm. Chỉ một tài liệu có thể giữ khóa tại một thời điểm, vì vậy tất cả những tài liệu khác phải chờ đợi.
Khi hàng đợi trở nên dài, bạn sẽ bắt đầu thấy:
- Tài liệu mất nhiều thời gian để lưu
- Các quá trình nhập hoặc nộp dữ liệu hàng loạt bị chậm hoặc bị treo
- Các lỗi như "Record has changed since last read in table 'tabSeries'" hoặc thời gian chờ khóa/bế tắc cơ sở dữ liệu
- Các công việc nền tồn đọng trong hàng đợi
Tình trạng này trở nên tồi tệ hơn sau những giai đoạn bận rộn, cuối tháng, hoặc khi thêm nhân viên để xử lý tải công việc, vì giờ đây có nhiều giao dịch hơn đang tranh giành cùng một bộ đếm đó.
Tại sao tình trạng này xảy ra nhiều hơn với tùy chỉnh
Một nguyên nhân phổ biến là việc tùy chỉnh ép buộc nhiều giao dịch thông qua một chuỗi đặt tên đơn lẻ và bị hạn chế. Mọi thứ dồn vào một bộ đếm, vì vậy bộ đếm này trở thành điểm nghẽn cho toàn bộ hoạt động. Bạn càng mở rộng quy mô, hàng đợi phía sau dòng đơn lẻ đó càng dài.
Cách khắc phục đơn giản: sử dụng nhiều hơn một chuỗi đặt tên
Bộ đếm bị khóa theo từng chuỗi đặt tên. Vì vậy, mẹo rất dễ dàng:
Hãy cung cấp cho các nhóm giao dịch khác nhau chuỗi đặt tên riêng của họ, để chúng sử dụng các bộ đếm khác nhau và ngừng chờ đợi lẫn nhau.
Thay vì một hàng đợi lớn tại một bộ đếm, bạn mở nhiều bộ đếm. Mỗi hàng đợi di chuyển độc lập và song song.
Các cách tốt để chia chuỗi
Hãy chọn bất kỳ phương thức nào phân chia các giao dịch của bạn một cách tự nhiên. Ví dụ:
| Chia theo | Ví dụ chuỗi |
| Chi nhánh | SINV-MUM-.YYYY.-.####, SINV-DEL-.YYYY.-.#### |
| Dự án | SINV-PROJ-A-.####, SINV-PROJ-B-.#### |
| Trung tâm chi phí | SINV-CC01-.####, SINV-CC02-.#### |
| Phòng ban | SINV-SALES-.####, SINV-SUPPORT-.#### |
Ý tưởng này giống nhau trong mọi trường hợp: các giao dịch chạy cùng lúc không nên cùng nằm trên một bộ đếm. Bạn càng phân tán chúng ra, mỗi giao dịch càng ít phải chờ đợi hơn.
Mẹo bổ sung cho các hoạt động rất lớn
Nếu bạn thường xuyên tạo các lô tài liệu khổng lồ cùng một lúc:
- Phân tán các dữ liệu nhập lớn qua nhiều chuỗi để chia sẻ tải công việc, thay vì nhập tất cả dưới một chuỗi.
- Tự cung cấp tên trong quá trình nhập/gọi API nếu có thể. Nếu một tài liệu đã có tên, ERPNext sẽ bỏ qua hoàn toàn bộ đếm. Không khóa, không chờ đợi. Ví dụ, mã khách hàng được tạo dựa trên chính Tên khách hàng.
- Tránh các tùy chỉnh ép buộc mọi thứ vào một chuỗi hẹp. Hãy xem xét bất kỳ logic đặt tên tùy chỉnh nào để đảm bảo nó không dồn tất cả giao dịch qua một bộ đếm duy nhất.
- Phân bổ các công việc rất lớn một chút thay vì kích hoạt tất cả chúng trong cùng một khoảnh khắc, nếu quy trình cho phép.