Sắp nghỉ Tết rồi, làm việc nốt ngày hôm nay là nghỉ, sáng mai về với thầy u. Dù sao cũng phải tổng kết năm một cái, đúc kết kinh nghiệm cho năm sau.
Năm 2008 là năm con gì nhỉ? đang hơi phê nên phải nghĩ đã... năm con chuột Mậu Tý, năm tuổi của mình. Một năm với nhiều biến động trong công việc, nhiều dự định, nhiều tính toán,.. nhưng cuối cùng phải rút ra một điều: làm cái gì cũng phải từ từ, không thể nghĩ là làm ngay được.
Có thể tóm tắt quá trình hoạt động của năm như sau:
Từ tháng 1 đến tháng 3 năm 2008 vẫn ở công ty F_S_C tham gia hoàn thiện nốt phần mềm quản lý chấm công, tính lương cho công ty Yamaha. Quyết định ra đi cũng là một quyết định khó vì đang có mối quan hệ rất tốt với mọi người bên đó, hơn nữa anh trưởng phòng cũng muốn giữ mình lại, cho mình một tháng để suy nghĩ kỹ trước khi ra đi. Nhưng chí đã quyết thì vẫn cứ ra đi, hi vọng tìm được một chân trời mới.
Từ ngày 17/3/2008 bắt đầu chuyển sang công ty V_I_E_G_R_I_D theo sự giới thiệu của một ông anh. Ở đây mình có điều kiện để phát huy hết khả năng của mình, có điều kiện để tham gia vào nhiều quá trình hơn trong quy trình phát triển phần mềm nhưng cũng có một vài điểm chưa tốt vốn vẫn tồn tại ở một công ty mới thành lập.
Vào tháng mấy nhỉ (quên mất)? bị trộm nó vác mất cái xe wave anpha mới mua được 1 năm gần 14 triệu (vẫn chưa trả hết nợ). Đen như chó mực, chó cắn áo rách! Hi vọng chủ nhân mới giữ dìn xe cẩn thận.
Thôi không nhắc chuyện đau thương làm gì cho mệt. Tổng kết thành quả, ưu – khuyết điểm của năm cái đã:
- Các kết quả đã làm được:
o Khảo sát quy trình nghiệp vụ, phân tích hệ thống phần mềm quản lý tổng thể bệnh viện (cụ thể tại bệnh viện Thanh_Trì – Hà_Nội).
o Khảo sát, phân tích, thiết kế, viết tài liệu hệ thống quản lý kho.
o Nghiên cứu các công nghệ, kỹ thuật lập trình trong Java: Sử dụng Spring Framework tích hợp trong Eclipse.
o Cùng nghiên cứu, xây dựng website cho công ty.
o Tìm hiểu, đăng ký mail server cho công ty.
o Tìm hiểu, sửa chữa, xây dựng phần mềm nhúng và phần mềm điều khiển trên PC cho 1 dự án viễn thông (vì lý do nhạy cảm nên không cần thiết nói đến tên gọi).
o Tham gia khảo sát, phân tích, thiết kế tổng thể, viết tài liệu dự án cổng thông tin đa phương tiện cho vịnh_Hạ_Long.
o Tham gia thiết kế, viết các tài liệu đặc tả, xây dựng hệ thống phần mềm hỗ_trợ_biên_dịch (vì lý do nhạy cảm nên không cần thiết nói đến tên gọi).
- Phân tích đánh giá ưu khuyết điểm đã làm được:
o Ưu điểm:
§ Nắm bắt nhanh, kịp thời các yêu cầu từ cấp trên.
§ Đối với phần lớn các công việc đều có lập kế hoạch cụ thể, chi tiết.
§ Vận dụng linh hoạt các kiến thức, kỹ năng đã có vào công việc.
§ Luôn cố gắng hoàn thành tốt các công việc.
§ Tích cực cập nhật các kiến thức mới phục vụ cho công việc.
o Nhược điểm:
§ Một số công việc không hoàn thành đúng thời hạn dự kiến trong kế hoạch do chưa lường hết được các vấn đề nảy sinh.
§ Một số công việc chưa lập kế hoạch cụ thể mà bắt tay vào làm ngay, lý do chủ yếu là khối lượng công việc đó nhỏ nên thường chủ quan.
- Những bài học kinh nghiệm:
o Tăng cường thảo luận, tập hợp khả năng, tri thức của tập thể nhằm giải quyết công việc.
o Đối với mỗi công việc đều phải có kế hoạch cụ thể, chi tiết và phải được sự phê duyệt từ phía lãnh đạo.
o Cần phân tích kỹ những thuận lợi, khó khăn, rủi ro có thể xảy ra đối với mỗi dự án.
o Đối với mỗi hệ thống khi triển khai cần phải theo đúng quy trình phát triển, đều phải phân tích, thiết kế, viết tài liệu sao cho đầy đủ nhất có thể trước khi thi hành. Trong thời gian thực hiện nếu có nảy sinh cần phải bổ xung ngay vào tài liệu.
o Các đề xuất, sáng kiến của cá nhân mang tính quyết định lớn đến sản phẩm nên đem ra thảo luận trong nhóm trước khi thực hiện.
o Cần báo cáo công việc thường xuyên, kịp thời với cấp trên.
Cuối năm cũng có một sự động viên nho nhỏ: mình được bầu là nhân viên của năm (cũng oai ra phết đấy chứ?). Cái mình thấy vui là được lãnh đạo đánh giá đúng khả năng của mình. Đơn giản vậy thôi. Chúc tất cả mọi người có cái Tết vui vẻ, người ít tiền cũng như người nhiều tiền, ai cũng vui vẻ bên người thân. Chúc mừng năm mới
Thứ Ba, 9 tháng 6, 2009
Xây dựng ứng dụng Web trên tập dữ liệu lớn
Nếu phải xây dựng 1 ứng dụng web trên một tập dữ liệu quá lớn (hàng tỷ recoed) thì vấn đề truy xuất, tìm kiếm dữ liệu là bài toán không đơn giản.
Sau khi suy ngẫm, tìm hiểu, tham khảo, mình đã có 1 cách làm (đang thử nghiệm…):
- DBMS đã được thiết kế để không ngốn quá nhiều tài nguyên trong khi chạy. Vì vậy nó không sử dụng hết khả năng của RAM, CPU, mà đôi khi ta thấy “tiếc của giời”. Chính vì vậy khi dữ liệu quá lớn tốc độ thực thi vẫn cứ chậm, do đó ta nên nghĩ đến khả năng là lôi toàn bộ (hoặc những gì ta cần) dữ liệu lên RAM rồi thực hiện tìm kiếm trên đó cho nhanh.
- Nếu đã sử dụng phương pháp trên thì nên cân nhắc lại việc đặt Indexes trên các trường tìm kiếm của Database vì nó chẳng phục vụ gì khi tìm kiếm trên RAM cả. Hơn nữa nếu đặt Indexes khi ta Insert, Update dữ liệu sẽ rất tốn kém thời gian vì DBMS phải thực hiện build lại indexes, tạo tệp tin chỉ mục,…
- Trong sự kiện Application_On_Start ta thực hiện đọc dữ liệu (tất cả hoặc một phần liên quan đến search) vào một Dataset (sử dụng phương thức Fill của DataAdapter). Tất các các Session sau đó sẽ sử dụng chung dữ liệu này. Chú ý là nên đặt các dữ liệu chung này ở tầm vực Static.
- Tại mỗi session ta thực hiện tạo các DataView cho các DataTable dùng chung này sau đó thực hiện tìm kiếm, sắp xếp, … trên DataView.
- Để tìm kiếm nhanh trên DataView, hãy tham khảo bài trước.
- Khi có cập nhật dữ liệu từ các session thì ta cập nhật trực tiếp vào DataTable sau đó thực hiện cập nhật lại dữ liệu nguồn trên DB thông qua DataAdapter (chỉ cập nhật sau khi đã Getchanged()).
Sau khi suy ngẫm, tìm hiểu, tham khảo, mình đã có 1 cách làm (đang thử nghiệm…):
- DBMS đã được thiết kế để không ngốn quá nhiều tài nguyên trong khi chạy. Vì vậy nó không sử dụng hết khả năng của RAM, CPU, mà đôi khi ta thấy “tiếc của giời”. Chính vì vậy khi dữ liệu quá lớn tốc độ thực thi vẫn cứ chậm, do đó ta nên nghĩ đến khả năng là lôi toàn bộ (hoặc những gì ta cần) dữ liệu lên RAM rồi thực hiện tìm kiếm trên đó cho nhanh.
- Nếu đã sử dụng phương pháp trên thì nên cân nhắc lại việc đặt Indexes trên các trường tìm kiếm của Database vì nó chẳng phục vụ gì khi tìm kiếm trên RAM cả. Hơn nữa nếu đặt Indexes khi ta Insert, Update dữ liệu sẽ rất tốn kém thời gian vì DBMS phải thực hiện build lại indexes, tạo tệp tin chỉ mục,…
- Trong sự kiện Application_On_Start ta thực hiện đọc dữ liệu (tất cả hoặc một phần liên quan đến search) vào một Dataset (sử dụng phương thức Fill của DataAdapter). Tất các các Session sau đó sẽ sử dụng chung dữ liệu này. Chú ý là nên đặt các dữ liệu chung này ở tầm vực Static.
- Tại mỗi session ta thực hiện tạo các DataView cho các DataTable dùng chung này sau đó thực hiện tìm kiếm, sắp xếp, … trên DataView.
- Để tìm kiếm nhanh trên DataView, hãy tham khảo bài trước.
- Khi có cập nhật dữ liệu từ các session thì ta cập nhật trực tiếp vào DataTable sau đó thực hiện cập nhật lại dữ liệu nguồn trên DB thông qua DataAdapter (chỉ cập nhật sau khi đã Getchanged()).
Làm thế nào để tìm kiếm nhanh trên Database và tìm kiếm nhanh trên DataTable của .NET.
Một số cách tăng tốc độ tìm kiếm trên DB:
- Trong các DBMS đều đã vận dụng các thuật toán tìm kiếm tiên tiến thế nhưng để các thuật toán đó có đất dụng võ, đòi hỏi phải có sự phối hợp với người sử dụng.
- Đặt indexes cho các trường cần tìm kiếm (primary key mặc nhiên đã là 1 indexes): cần lưu ý rằng, nếu đã có tập dữ liệu lớn thì nên insert tập dữ liệu ban đầu đó sau đó mới tạo indexes, vì khi tạo indexes nó sẽ thực hiện cấu trúc lại dữ liệu, thao tác này tốn khá nhiều thời gian. Tạo indexes sẽ giúp tìm kiếm nhanh nhưng kéo theo là các lệnh delete, insert, update sẽ thực thi chậm hơn. Tùy “hoàn cảnh” mà chọn giải pháp.
- Tối ưu hóa các câu truy vấn (vấn đề này tìm trên mạng rất nhiều với các từ khóa như: “tối ưu hóa câu truy vấn sql”, “nguyên nhân những câu truy vấn chậm”,…).
Một số cách tăng tốc độ tìm kiếm trên DataTable của .Net:
- Nếu DataTable đã tạo Primary Key mà phải tìm kiếm trên trường này thì sử dụng phương thức DataTable.Rows.Find() thay vì sử dụng DataTable.Select(). Phương thức Find sẽ sử dụng index khi tìm kiếm.
- Nếu column cần tìm không phải là Primary thì nên sử dụng DataView. Trước hết Sort theo column đó rồi tìm kiếm bằng phương thức DataView.FindRows().
- Một giải pháp nữa được thực hiện trên DataTable là dùng lệnh DataTable.Select(null,”[Field_Name]”) sẽ thực hiện sort và tạo index trên [Field_Name], sau đó thực hiện tìm kiếm. Cách này không thấy đề cập tới nhiều nên không chắc lắm.
- Trong các DBMS đều đã vận dụng các thuật toán tìm kiếm tiên tiến thế nhưng để các thuật toán đó có đất dụng võ, đòi hỏi phải có sự phối hợp với người sử dụng.
- Đặt indexes cho các trường cần tìm kiếm (primary key mặc nhiên đã là 1 indexes): cần lưu ý rằng, nếu đã có tập dữ liệu lớn thì nên insert tập dữ liệu ban đầu đó sau đó mới tạo indexes, vì khi tạo indexes nó sẽ thực hiện cấu trúc lại dữ liệu, thao tác này tốn khá nhiều thời gian. Tạo indexes sẽ giúp tìm kiếm nhanh nhưng kéo theo là các lệnh delete, insert, update sẽ thực thi chậm hơn. Tùy “hoàn cảnh” mà chọn giải pháp.
- Tối ưu hóa các câu truy vấn (vấn đề này tìm trên mạng rất nhiều với các từ khóa như: “tối ưu hóa câu truy vấn sql”, “nguyên nhân những câu truy vấn chậm”,…).
Một số cách tăng tốc độ tìm kiếm trên DataTable của .Net:
- Nếu DataTable đã tạo Primary Key mà phải tìm kiếm trên trường này thì sử dụng phương thức DataTable.Rows.Find() thay vì sử dụng DataTable.Select(). Phương thức Find sẽ sử dụng index khi tìm kiếm.
- Nếu column cần tìm không phải là Primary thì nên sử dụng DataView. Trước hết Sort theo column đó rồi tìm kiếm bằng phương thức DataView.FindRows().
- Một giải pháp nữa được thực hiện trên DataTable là dùng lệnh DataTable.Select(null,”[Field_Name]”) sẽ thực hiện sort và tạo index trên [Field_Name], sau đó thực hiện tìm kiếm. Cách này không thấy đề cập tới nhiều nên không chắc lắm.
Đăng ký:
Bài đăng (Atom)