Viết bởi chung » Ba T9 05, 2006 10:24 am
1. Nhìn lại lịch sử một chút chúng ta có thể thấy rõ ràng rằng:
Từ application sử dụng flat data để store thông tin -> Chuyển sang sử dụng Database server.
Bước chuyển này rất là ngoạn mục lắm, hầu như performance application được nâng cấp, dữ liệu data có lớn cũng không còn là vấn đề đáng ngại nữa... Các kỹ thuật để thiết lập cấu trúc cho DB đã được khai thác và phát triển liên tục đến giờ có thể nói là đã hoàn chỉnh lắm.
Tuy nhiên vấn đề có vẻ không chỉ dừng lại, bản thân DB cũng nằm trên Harddisk, và mỗi lần muốn có dữ liệu phải dùng SQL để lấy, điều này đến lúc sẽ đạt đến sự giới hạn của nó mà không thể thoã mãn được thời đại sau này.
Chính vì vậy mà:
Từ application sử dụng flat data để store thông tin -> Chuyển sang sử dụng Database server -> Tất cả cho vào memory
Tức là khi application khởi động tất cả dữ liệu sẽ được cho tất vào memory, điều đó sẽ:
+ Tốc độ access cực nhanh
+ Có thể không phải qua trung gian tái tạo, kết hợp để tạo dữ liệu cuối cùng.
Ví dụ: Thường thì một class Student, có tên, tuổi, môn học, lớp trường, trước đến giờ học ở đâu, thành tích thế nào, con ai ông bà nào, quê quán ở đâu... Để lấy thông tin của object Student này, thường phải SQL hằng loạt tables trong DB, sau đó tái tạo, kết hợp, khi cần phải chạy một số logic khác nhau mới có thể cho ra Object Student được... Tuy nhiên cả cái Object này nếu được nằm luôn trên memory thì lần sau chỉ cần get data trên memory là xong. Điều này sẽ nhanh không thể tưởng tượng được...
Thời đại bây giờ, khi các hardware dùng cho máy tính ngày càng rẽ, dung lượng memory không khác gì Hardware cả thì việc nói ở trên đã không còn là điều khó thực hiện.
2. Về kỹ thuật cho phần này thì bây giờ đã như thế nào nhỉ?
Theo như hiểu biết của mình thì như sau:
+ Các application có riêng architecture riêng để store data trên memory...
Các ngôn ngữ đều có chức năng này, tuy nhiên để làm được điều này cần phải đòi hỏi trình độ của người thiết lập cấu trúc cho chương trình, và tránh sự xung khắc với các application khác của system...
+ Sử dụng các soft thirdparty về cache data lên memory.
Những cái này có nhiều, ví dụ memcached
+ Thiết lập filesystem tren memory luôn. Ví dụ FreeBSD Memory Filesystem
+ Các application server như Jboss, WebSphere có riêng chức năng cache của mình
+++ Và quan trọng nhất là gần đây, bản thân các DB software đã được chức năng này vào DB của mình. Ví dụ: Mysql
http://opentechpress.jp/article.pl?sid=06/09/04/0227228&from=rss
http://tangent.org/index.pl?lastnode_id=478&node_id=506
Phải công nhận nếu như trong bản thân các DB có sẵn chức năng này thì phía application dev sẽ rất là tiện lợi lắm. Vì không còn phải nghĩ ngợi hay viết code để thực hiện động tác này nữa.
1. Nhìn lại lịch sử một chút chúng ta có thể thấy rõ ràng rằng:
Từ application sử dụng flat data để store thông tin -> Chuyển sang sử dụng Database server.
Bước chuyển này rất là ngoạn mục lắm, hầu như performance application được nâng cấp, dữ liệu data có lớn cũng không còn là vấn đề đáng ngại nữa... Các kỹ thuật để thiết lập cấu trúc cho DB đã được khai thác và phát triển liên tục đến giờ có thể nói là đã hoàn chỉnh lắm.
Tuy nhiên vấn đề có vẻ không chỉ dừng lại, bản thân DB cũng nằm trên Harddisk, và mỗi lần muốn có dữ liệu phải dùng SQL để lấy, điều này đến lúc sẽ đạt đến sự giới hạn của nó mà không thể thoã mãn được thời đại sau này.
Chính vì vậy mà:
Từ application sử dụng flat data để store thông tin -> Chuyển sang sử dụng Database server -> Tất cả cho vào memory
Tức là khi application khởi động tất cả dữ liệu sẽ được cho tất vào memory, điều đó sẽ:
+ Tốc độ access cực nhanh
+ Có thể không phải qua trung gian tái tạo, kết hợp để tạo dữ liệu cuối cùng.
Ví dụ: Thường thì một class Student, có tên, tuổi, môn học, lớp trường, trước đến giờ học ở đâu, thành tích thế nào, con ai ông bà nào, quê quán ở đâu... Để lấy thông tin của object Student này, thường phải SQL hằng loạt tables trong DB, sau đó tái tạo, kết hợp, khi cần phải chạy một số logic khác nhau mới có thể cho ra Object Student được... Tuy nhiên cả cái Object này nếu được nằm luôn trên memory thì lần sau chỉ cần get data trên memory là xong. Điều này sẽ nhanh không thể tưởng tượng được...
Thời đại bây giờ, khi các hardware dùng cho máy tính ngày càng rẽ, dung lượng memory không khác gì Hardware cả thì việc nói ở trên đã không còn là điều khó thực hiện.
2. Về kỹ thuật cho phần này thì bây giờ đã như thế nào nhỉ?
Theo như hiểu biết của mình thì như sau:
+ Các application có riêng architecture riêng để store data trên memory...
Các ngôn ngữ đều có chức năng này, tuy nhiên để làm được điều này cần phải đòi hỏi trình độ của người thiết lập cấu trúc cho chương trình, và tránh sự xung khắc với các application khác của system...
+ Sử dụng các soft thirdparty về cache data lên memory.
Những cái này có nhiều, ví dụ memcached
+ Thiết lập filesystem tren memory luôn. Ví dụ FreeBSD Memory Filesystem
+ Các application server như Jboss, WebSphere có riêng chức năng cache của mình
+++ Và quan trọng nhất là gần đây, bản thân các DB software đã được chức năng này vào DB của mình. Ví dụ: Mysql
http://opentechpress.jp/article.pl?sid=06/09/04/0227228&from=rss
http://tangent.org/index.pl?lastnode_id=478&node_id=506
Phải công nhận nếu như trong bản thân các DB có sẵn chức năng này thì phía application dev sẽ rất là tiện lợi lắm. Vì không còn phải nghĩ ngợi hay viết code để thực hiện động tác này nữa.