Khi làm việc với dữ liệu lớn với số lượng lên đến 50 người, có khi tới vài trăm người sử dụng:
- Bạn đã bao giờ chờ hơn 10 giây để lưu một chứng từ?
- Bạn có bao giờ chờ vài phút để có kết quả truy vấn của một báo cáo?
- Bạn đã bao giờ trước khi rời đi ăn trưa thì chạy tính giá vốn để khi quay về thì có số liệu báo cáo nhưng sau đó khi kiểm tra thấy sai và lại chờ cả tiếng để chạy lại?
- …
Nếu là có, chắc hẳn bạn là người thật sự đau khổ khi phải chung sống với công cụ phục vụ công việc hằng ngày.
Ảnh minh họa
Khi lựa chọn giải pháp ERP cho doanh nghiệp, phần lớn mọi người thường hay chú tâm đến các yếu tố:
- Nghiệp vụ đầy đủ, phải đáp ứng được nhu cầu quản trị của doanh nghiệp
- Công nghệ tiên tiến
- Bảo mật hệ thống
- Các tiện ích khi nhập liệu
- …
Thế nhưng một yếu tố vô cùng quan trọng mà đa số người dùng khó kiểm tra được khi làm việc với đối tác cung cấp phần mềm đó chính là tốc độ của hệ thống. Yếu tố này thường sẽ bộc phát sau khi dự án vận hành chính thức sau hơn một năm mà chỉ có những người từng nếm mùi đau khổ mới thấu hiểu. Thông thường vòng đời sử dụng của một phần mềm trước khi nâng cấp lên phiên bản mới có thể đến 5 năm hoặc lâu hơn. Vậy nên càng những năm sau thì tốc độ sẽ càng chậm dần đi.
Vậy thì giải pháp phần mềm ERP Fast Business Online của FAST có những đặc điểm gì để tăng tốc độ?
Thứ 1: Phân trang trong danh mục và báo cáo
Fast Business Online không lấy toàn bộ dữ liệu về máy làm việc mà lấy từng phần 1 – từng trang.
Phân trang trong Fast Business Online
Khi tải dữ liệu chương trình chỉ tải đúng số bản ghi được định nghĩa sẵn (5-10-15-25-…) nên rất nhanh so với việc tải toàn bộ bản ghi của dữ liệu cần truy vấn. Việc số bản ghi 5 hay 10 trên mỗi trang có thể khai báo lại để thay đổi cho phù hợp với với người dùng. Tính năng phân trang này cũng được Google áp dụng trong thể hiện kết quả tìm kiếm mà chúng ta vẫn dùng hằng ngày.
Phân trang của Google
Thứ 2: Chia nhỏ bảng trong cơ sở dữ liệu (Table partitioning)
Ở yếu tố này chúng ta sẽ khó hình dung hơn do không thể hiện trực quan ở lớp giao diện người dùng mà ở lớp cơ sở dữ liệu (database).
Để dễ hiểu, bạn hình dung khi lưu hoặc mở một file excel 1 triệu dòng thì nó sẽ như thế nào với khi bạn chia nhỏ file đó thành 10 file nhỏ với mỗi file là 100 ngàn dòng? Tất nhiên là chậm hơn rất nhiều rồi phải không nào! Với cách đó, Fast Business Online đã chia nhỏ các bảng dữ liệu thành nhiều kỳ (tháng) khác nhau, ví dụ dữ liệu của hóa đơn bán hàng, Fast Business Online chia ra thành 12 bảng của mỗi năm khác nhau, khi truy vấn số liệu của kỳ nào thì sẽ can thiệp vào đúng tệp đó mà thôi. Việc chia bảng này là ở thiết kế của Fast Business Online chứ không cần đến tính năng chỉ có trong phiên bản cao cấp Enterprise của hệ quản trị cơ sở dữ liệu SQL Server mà người dùng khi đầu tư chi phí lên đến vài chục ngàn USD.
Minh họa việc chia bảng
Đến đây chắc có ý kiến cho rằng như vậy chỉ giải quyết được một phần nào đó về tốc độ thôi vì khi xem báo cáo của tháng 10-2020 chẳng hạn thì phần mềm vẫn phải truy xuất lại các bảng của tháng 01-2020 đến tháng 09-2020 để tính toán ra số đầu kỳ của tháng 10-2020. Các bạn đừng lo lắng! Các chuyên gia của FAST đã tính toán đến việc đó và đã phát triển thêm chức năng khóa số liệu theo kỳ (tháng) để các bảng lưu dữ liệu có sẵn số liệu đầu kỳ mà không cần phải tính toán lại nữa.
Không chỉ dừng lại ở đó, hệ thống còn cho phép đặt các bảng dữ liệu này ở các phân vùng, các ổ cứng vật lý khác nhau nhằm tận dụng tối đa hiệu suất truy vấn.
Cơ sở dữ liệu được chia nhỏ
Như vậy, theo thời gian dữ liệu sẽ tăng lên, nhưng do được thiết kế lưu theo từng kỳ nên thời gian làm việc hoặc tìm kiếm trong một khoảng thời gian sẽ không đổi. Nghĩa là nếu hiện tại bạn xem số liệu của 1 năm thì 10 năm sau bạn xem số liệu của 1 năm đó thì thời gian truy vấn vẫn không thay đổi.
Đối với giải pháp này mọi khó khăn dồn hết cho đội ngũ lập trình của FAST khi số lượng bảng dữ liệu phải làm việc rất nhiều và tăng lên theo từng năm. Còn về phía người dùng sẽ không có một sự thay đổi hay bất tiện nào cả.
Thứ 3: Tạo bảng dữ liệu riêng để phục vụ truy vấn và tra cứu số liệu
Việc tạo bảng dữ liệu tìm kiếm và truy vấn dữ liệu cũng được thiết kế theo từng kỳ như đã đề cập ở trên. Câu hỏi đặt ra nếu làm như vậy thì cơ sở dữ liệu (database) sẽ phình to ra. Không sai, nhưng việc phình to của database chỉ ảnh hưởng về mặt lưu trữ của ổ cứng, vấn đề này quá nhỏ so với hiệu quả mà yếu tố tốc độ mang lại.
Việc tiếp theo sau khi tạo bảng dữ liệu sẽ tạo thêm một trường trên bảng đã tạo. Nhiệm vụ của trường này sẽ lưu các giá trị của các tìm kiếm, nếu chứng từ nhiều dòng nhưng cùng giá trị thì cũng chỉ lưu 1 giá trị. Ví dụ trên bảng dữ liệu chi tiết của hóa đơn bán hàng sẽ lưu vào trường mới thêm các thông tin:
#ma_vt$KHAUTRANG#ma_kho$KHOHCM#tk_dt$51111 (ý nghĩa giá trị lưu: mã hàng hóa = KHAUTRANG, mã kho = KHOHCM và tài khoản doanh thu = 51111)
Chức năng database
Vậy tại sao thêm bảng và trường riêng thì tốc độ lại tăng?
1. Thêm bảng dữ liệu: Việc này để chia tải cho database, cụ thể là chính bảng dữ liệu đó. Vì khi chúng ta thực thi nhiều câu lệnh truy vấn cùng một lúc, cùng một bảng dữ liệu thì chắc chắn sẽ chậm hơn khi mỗi bảng dữ liệu đảm nhiệm một chức năng truy vấn khác nhau. Hiểu nôm na sẽ có một bảng để phục vụ tìm kiếm, truy vấn báo cáo và một bảng để phục vụ công tác nhập liệu (thêm mới, xóa…)
2. Thêm trường lưu thông tin tìm kiếm: Cách hiểu sẽ gần giống như việc thêm bảng dữ liệu, khi truy vấn chỉ truy xuất vào ít trường của một bảng thay vì nhiều trường trên nhiều bảng và sau khi tìm kiếm dữ liệu sẽ trả về theo từng trang chứ không theo tất cả các bản ghi, khi đó tùy vào yêu cầu của người dùng mà chương trình chỉ hiển thị số liệu cần thiết (Ví dụ khi tìm kiếm có 1 nghìn bản ghi, người sử dụng đang xem trang thứ 2 thì hệ thống chỉ lấy dữ liệu cần thiết của trang 2)
Giải pháp này giúp truy vấn cực nhanh, chúng ta có thể tìm kiếm vài triệu bản ghi trong vòng vài giây.
Thứ 4: Các yếu tố khác
1. Tất cả chức năng cùng chạy chung qua thư viện (dll) rất nhỏ, do đó không tốn thời gian vì các dll chỉ khởi tạo một lần và tất nhiên không tốn nhiều bộ nhớ trên máy chủ.
2. Nén 2 chiều khi truyền dữ liệu (từ server xuống client và ngược lại). Thông thường các phần mềm nền tảng web chỉ nén 1 chiều mà thôi.
3. Truy vấn đúng các thông tin cần thiết chứ không lấy toàn bộ dữ liệu trong cơ sở dữ liệu, giống như chúng ta chỉ mua khẩu trang và nước sát khuẩn thay vì mua hết cả siêu thị trong khi các mặt hàng khác không cần. (Ví dụ thay đổi câu lệnh: Select ma_vt, ma_kho thay vì Select *).
4. Khi sửa chứng từ chỉ cập nhật các thông tin thay đổi mà không cập nhật lại các giá trị không thay đổi.
5. Lưu các đối tượng hay lặp lại dưới máy trạm (client) trong phiên làm việc (session). Phần này giúp giảm dung lượng khi tải về trên 10 lần, do đó so với lần đầu tiên tải thì dung lượng giảm trên 100 lần.
6. Giảm dung lượng file aspx.
7. Giảm số lượng Request tối thiểu lên Server.
8. …
Về đảm bảo tốc độ cho hệ thống tất nhiên còn nhiều yếu tố liên quan đến cơ sở hạ tầng và nhiều thứ khác nhưng bài viết này chỉ đề cập đến việc thiết kế cơ sở dữ liệu và các thuật toán để tăng tốc độ, các yếu tố khác xem như lý tưởng.
Hiện tại FAST có khá nhiều khách hàng đang sử dụng giải pháp ERP với dữ liệu rất lớn. Số lượng người sử dụng lên đến vài trăm, có khách hàng đến gần 1.000, nhưng tốc độ làm việc vẫn đảm bảo yêu cầu thực tế.
Xem thêm thông tin về Công ty phần mềm FAST tại: www.fast.com.vn |
Tác giả: VươngHT