Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 14 kết quả

Đề tài: Load database trong mô hình 3-tiers?

  1. #1
    Ngày gia nhập
    08 2006
    Nơi ở
    Hải Phòng
    Bài viết
    78

    Mặc định Load database trong mô hình 3-tiers?

    khi làm việc với model 3-tiers có một điều cần quan tâm ở đây là tốc độ load data, vì database nằm ở trên server không nằm ở client nên khi load về client chắc chắn là tốc độ sẽ lâu hơn so với model 2-tiers (vốn dĩ database năm trên client), với data trong table khoảng mấy trăm record thì không sao, nhưng có database lớn mà số lượng record trong table có thể nên tới hàng nghìn, trăm nghìn thậm chí hàng triệu, tất nhiên là tối ưu tốc độ có nhiều mức, ở đây tôi chỉ nói trong lập trình, vậy các bạn ai có giải pháp nào cùng đưa nên đây thảo luận và có demo test càng tốt.

  2. #2
    Ngày gia nhập
    06 2007
    Nơi ở
    HCM
    Bài viết
    365

    Hưởng nhầm rồi , model nào thì DataBase cũng không thể nằm ở client.
    Giải pháp tối ưu khi load dữ liệu thường thấy :
    - Page Load : Load theo từng trang, bạn có thấy ứng dụng web nào khi load db lại load tới hàng ngàn bản ghi không ?? google theo key word "page load example "cũng tầm tầm 2.5 triệu kết quả , các điều khiển trên ASP.Net đã mặc nhiên hỗ trợ page load , ngoài ra có thể kết hợp AJAX để truy vấn dữ liệu cần thiết mà ko phải submit cả form.
    -Local cached : Với các ứng dụng win form thì có đặc trưng là người dùng phải xử lý mựot với một lượng lớn dữ liệu, ta có thể tạo một cached table ở máy cục bộ, khi người dùng online thì đồng bộ dữ liệu với server do vậy trên thực tế số lượng bản ghi phải sử lý rất ít , VS 2K8 có template Local DataBase cache để giải quyết trường hợp này , code chỉ mất vài dòng.Các điều khiển chuẩn của Win form cũng hỗ trợ thêm Virtual mode để xử lý các trường hợp này, để tránh trường hợp máy treo khi load dữ liệu bạn có thể chuyển sang dùng các function bất đồng bộ : có thêm từ Asyn của SQLSERVER: hoặc dùng đa luồng để xử lý.

  3. #3
    Ngày gia nhập
    11 2008
    Bài viết
    12

    Trích dẫn Nguyên bản được gửi bởi huongit1984 Xem bài viết
    khi làm việc với model 3-tiers có một điều cần quan tâm ở đây là tốc độ load data, vì database nằm ở trên server không nằm ở client nên khi load về client chắc chắn là tốc độ sẽ lâu hơn so với model 2-tiers (vốn dĩ database năm trên client), với data trong table khoảng mấy trăm record thì không sao, nhưng có database lớn mà số lượng record trong table có thể nên tới hàng nghìn, trăm nghìn thậm chí hàng triệu, tất nhiên là tối ưu tốc độ có nhiều mức, ở đây tôi chỉ nói trong lập trình, vậy các bạn ai có giải pháp nào cùng đưa nên đây thảo luận và có demo test càng tốt.
    Nói như vậy có vẻ là chưa hiểu về 3-tiers là gì. --> Sorry bạn Huongit1984 về câu này.
    3tiers nó phân biệt các tầng của nó mang nặng ý nghĩa về logic là chính, không phải là về vật lý. Vì vậy người ta không nghĩ là để db ở đâu.
    Cái người ta muốn giải quyết với mô hình đó là tách các xử lý thành các phần chuyên biệt.

    Tầng data Access: Chỉ để thao tác lấy ra dữ liệu
    Tầng Business: Sử dụng data access để lấy được dữ liệu và thao tác xử lý trên dữ liệu đó để phục vụ cho một nghiệp vụ
    Tầng Interface: Gọi ra các xử lý ở Business để hiển thị dữ liệu.

    Tại sao người ta phải làm vậy? Đối với một hệ thống được thiết kế tốt thì yếu tố bảo trì và mở rộng luôn được tính đến. Vào một ngày đẹp trời nào đấy, người ta muốn thay đổi một số nghiệp vụ, hoặc thêm vào các nghiệp vụ mới, nếu sử dụng mô hình này thì có thể dễ dàng cài đặt. Đấy mới là mục đích của việc sử dụng mô hình này.
    Đã được chỉnh sửa lần cuối bởi dangkyall : 23-12-2008 lúc 12:12 PM.

  4. #4
    Ngày gia nhập
    11 2007
    Bài viết
    294

    My God ^^!

    Bạn dangkyall đang nói đến 3-tier hay 3-layer đấy ^^!

    Cái mà bạn nói là layer chứ ko phải tier ^^! Tier là mang ý nghĩa phân tách về mặt vật lý, còn layer mới là phân tách về mặt logic.

    Và đã đề cập đến tier thì dĩ nhiên phải nhắc đến Database. Tier bao gồm Client - AppServer(Middleware) - DatabaseServer.

    @ huong : Nếu cần dữ liệu lớn ở client, ngoài cách cache của bác Phạm ra thì còn có thể cân nhắc cách sử dụng replication. Dark ko có rành sqlserver nên không rõ sqlserver dùng replication thế nào, có lẽ phải hỏi bác Pham ^^!

    @ bác Pham : Cái SOA bác treo lâu quá đấy ^^!
    Is the moon rising...

  5. #5
    Ngày gia nhập
    11 2008
    Bài viết
    12

    Mình không rõ là tiers hay layer. Có thể mình hiểu sai:

    What is a 3-tier architecture?

    Three-tier (layer) is a client-server architecture in which the user interface, business process (business rules) and data storage and data access are developed and maintained as independent modules or most often on separate platforms. Basically, there are 3 layers, tier 1 (presentation tier, GUI tier), tier 2 (business objects, business logic tier) and tier 3 (data access tier). These tiers can be developed and tested separately.

    What is the need for dividing the code in 3-tiers? Separation of the user interface from business logic and database access has many advantages. Some of the advantages are as follows:

    * Reusability of the business logic component results in quick development. Let's say we have a module that handles adding, updating, deleting and finding customers in the system. As this component is developed and tested, we can use it in any other project that might involve maintaining customers.
    * Transformation of the system is easy. Since the business logic is separate from the data access layer, changing the data access layer won’t affect the business logic module much. Let's say if we are moving from SQL Server data storage to Oracle there shouldn’t be any changes required in the business layer component and in the GUI component.
    * Change management of the system is easy. Let's say if there is a minor change in the business logic, we don’t have to install the entire system in individual user’s PCs. E.g. if GST (TAX) is changed from 10% to 15% we only need to update the business logic component without affecting the users and without any downtime.
    * Having separate functionality servers allows for parallel development of individual tiers by application specialists.
    * Provides more flexible resource allocation. Can reduce the network traffic by having the functionality servers strip data to the precise structure needed before sending it to the clients.

    Trích từ codeproject
    http://www.codeproject.com/KB/archit...hitecture.aspx

  6. #6
    Ngày gia nhập
    08 2006
    Nơi ở
    Hải Phòng
    Bài viết
    78

    Mặc định Load database trong mô hình 3-tiers?

    Trích dẫn Nguyên bản được gửi bởi Haipt Xem bài viết
    Hưởng nhầm rồi , model nào thì DataBase cũng không thể nằm ở client.
    Giải pháp tối ưu khi load dữ liệu thường thấy :
    - Page Load : Load theo từng trang, bạn có thấy ứng dụng web nào khi load db lại load tới hàng ngàn bản ghi không ?? google theo key word "page load example "cũng tầm tầm 2.5 triệu kết quả , các điều khiển trên ASP.Net đã mặc nhiên hỗ trợ page load , ngoài ra có thể kết hợp AJAX để truy vấn dữ liệu cần thiết mà ko phải submit cả form.
    -Local cached : Với các ứng dụng win form thì có đặc trưng là người dùng phải xử lý mựot với một lượng lớn dữ liệu, ta có thể tạo một cached table ở máy cục bộ, khi người dùng online thì đồng bộ dữ liệu với server do vậy trên thực tế số lượng bản ghi phải sử lý rất ít , VS 2K8 có template Local DataBase cache để giải quyết trường hợp này , code chỉ mất vài dòng.Các điều khiển chuẩn của Win form cũng hỗ trợ thêm Virtual mode để xử lý các trường hợp này, để tránh trường hợp máy treo khi load dữ liệu bạn có thể chuyển sang dùng các function bất đồng bộ : có thêm từ Asyn của SQLSERVER: hoặc dùng đa luồng để xử lý.
    -local cached : không dùng trong 3-tiers được anh à (cái này em đoán, nếu sai anh giải thích dùm)
    -page load : thực ra là lấy 1 số record nhất định hiển thị lên grid, có một phát sinh là, nếu trong table có 1 col là giá cả, và bây giờ user muốn tính tổng giá của table thì sao anh ? với lại page load, load data từng đoạn "gãy khúc" nó không mang tính disconnect mấy thì phải, vì mỗi lần scroll nếu quá số record lại phải connect và load, với lại load page trong 3-tiers và 2-tiers có lẽ là khác nhau đấy anh, và trong 3-tiers em muốn lấy data từ server về client tối ưu nhất, cái này có lẽ liên quan đến mấy cái procol rồi, và trong số đo TCP là nhanh nhất, vậy em muốn hỏi anh còn cách nào tối ưu hơn nữa không ?

  7. #7
    Ngày gia nhập
    11 2007
    Bài viết
    294

    @ dangkyall : Đang dùng C# thì lấy MSDN ra tra khảo cho tiện, nhỉ ^^!

    http://msdn.microsoft.com/en-us/library/ms978689.aspx

    3-tiers



    3 layer

    Đã được chỉnh sửa lần cuối bởi darkan : 23-12-2008 lúc 12:43 PM.
    Is the moon rising...

  8. #8
    Ngày gia nhập
    11 2008
    Bài viết
    12

    @darkan: Ok. Thanks bạn. Mình nhận sai. Xin lỗi bạn Huongid1984.
    Đúng là có 2 khái niệm phân biệt giữa tier và layer. Tuy nhiên 2 khái niệm này cũng thường được sử dụng thay đổi cho nhau.
    Tham khảo: http://vishwamohan.blogspot.com/2006...s-3-layer.html
    Đã được chỉnh sửa lần cuối bởi dangkyall : 23-12-2008 lúc 01:36 PM.

  9. #9
    Ngày gia nhập
    08 2006
    Nơi ở
    Hải Phòng
    Bài viết
    78

    sạc, hình như các bạn đang đi lạc chủ đề rồi, tập trung vào ý mình hỏi đi, như anh Haipt đã đưa ra ý kiến đó, mọi người cùng đưa ra ý kiến nào, đây quả thực là vấn đề học búa nhưng cũng rất thú vị, nếu có nguồn nào nói về vấn đề này các bạn cho mình xin link

  10. #10
    Ngày gia nhập
    06 2007
    Nơi ở
    HCM
    Bài viết
    365

    Trích dẫn Nguyên bản được gửi bởi huongit1984 Xem bài viết
    -local cached : không dùng trong 3-tiers được anh à (cái này em đoán, nếu sai anh giải thích dùm)
    chưa chịu tìm hiểu
    http://msdn.microsoft.com/en-us/library/bb882690.aspx


    Trích dẫn Nguyên bản được gửi bởi huongit1984 Xem bài viết
    -page load : thực ra là lấy 1 số record nhất định hiển thị lên grid, có một phát sinh là, nếu trong table có 1 col là giá cả, và bây giờ user muốn tính tổng giá của table thì sao anh ? với lại page load, load data từng đoạn "gãy khúc" nó không mang tính disconnect mấy thì phải, vì mỗi lần scroll nếu quá số record lại phải connect và load, với lại load page trong 3-tiers và 2-tiers có lẽ là khác nhau đấy anh, và trong 3-tiers em muốn lấy data từ server về client tối ưu nhất, cái này có lẽ liên quan đến mấy cái procol rồi, và trong số đo TCP là nhanh nhất, vậy em muốn hỏi anh còn cách nào tối ưu hơn nữa không ?
    Tính tổng giá thì chỉ cần viết 1 query ở tầng DAO trả trả về đúng 1 giá trị là xong, nếu cái bảng của em trước khi đưa ra client cần xào nấu ( ví dụ cột giá được apply business ) thì em chỉnh sửa, xào nấu nó ở tầng business , tầng client chỉ có 1 nhiệm vụ thực thi chức năng của tầng BIL .
    Hì dường như Hưởng bị tẩu hỏa nhập ma với 2 tier, 3 tier mất rồi . Thế nào gọi là "gãy khúc" ??? vì thực tế nếu table có 1 triệu bản ghi thì :
    - Người sử dụng không thể xem cùng lúc 1 triệu bản ghi: cùng lắm chỉ 20 bản ghi 1 lúc
    - Mỗi lần thao tác như sửa xóa thì chỉ thao tác 1 bản ghi ở một thời điểm
    - Thời gian load các page cho người dùng là rất nhanh.với các kỹ thuật như lập trình bất đồng bộ ( các lệnh có từ asyn của sql server ), AJAX.. thì gần như user ko cảm thấy thời gian trễ )
    Hiện tại các ứng dụng đa phần được phân tán trên lan, wan .. lên việc load hết sạch DB cùng 1 lúc là 1 việc củ chuối , cứ tưởng tượng, 1000 người dùng đều yêu cầu load 1 .000.000 bản ghi thì liệu có server nào chịu nổi .
    Các control web, win form đều có các mode để support chế độ page load, với các ASP server control thì mặc nhiên đã hỗ trợ.

Các đề tài tương tự

  1. ADO.NET Load giá trị ngẫu nhiên từ database bằng SQL trong winform C#
    Gửi bởi Cerberus. trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 28-05-2012, 08:21 PM
  2. Database ẩn cột id trong gridcontrol và load ảnh từ database vào picture box
    Gửi bởi nguyen_hung5716 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 30-04-2012, 01:52 PM
  3. ADO.NET Load ảnh từ đường dẫn trong database vào Report
    Gửi bởi quannguyen trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 24-03-2012, 09:17 PM
  4. Database Load database access lên listview trong lập trình C#
    Gửi bởi dothanhlap trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 12-05-2011, 04:35 PM
  5. Load dữ liệu từ access database trong button!
    Gửi bởi viettuqn trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 15-09-2010, 07:48 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn