• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

[VB.NET] Nhờ giúp đỡ tối ưu đọc dữ liệu từ database

Nơi trao đổi về các vấn đề trong lập trình Windows Forms, Console dùng cú pháp ngôn ngữ Visual Basic .NET và C#

Điều hành viên: tungblt, vuathongtin

afrendly
Bài viết: 7
Ngày tham gia: T.Hai 06/05/2013 12:09 pm
Has thanked: 1 time

[VB.NET] Nhờ giúp đỡ tối ưu đọc dữ liệu từ database

Gửi bàigửi bởi afrendly » T.Năm 25/04/2019 12:25 pm

Xin chào mọi người. Mình có vấn đề sau, nhờ mọi người giúp đỡ cho.
1. Vấn đề 1.
Mình đọc và xử lý 1 cột thông tin trong database cho trước. Mình dùng cách sau.

Mã: Chọn hết

        str = "SELECT * FROM Bang"
        Dim cmd As OleDbCommand = New OleDbCommand(str, cnn)
        dr = cmd.ExecuteReader
        While dr.Read()
            'Xử lý với 1 cột dữ liệu của dr
        End While
        cnn.Close()

Kết quả xuất ra tốt nhưng vấn đề là mình thấy nó rất chậm. Với dữ liệu có khoảng 31k dòng thì chạy mất tới 50 giây. Mình thấy lâu vì so với code trước đây mình không dùng database thì chỉ mất 40 giây (trong khi phải xử lý tạo ra cột dữ liệu rồi mới xử lý được).

2. Vấn đề thứ 2
Mình tạo bảng trong database có chứa 1 cột là chỉ số của dòng để lấy dữ liệu dòng theo chỉ số khi cần. Khi mình xoá 1 dòng cần đánh lại chỉ số này. Vậy có cách nào đánh lại chỉ số tốt không? Hiện tại, mình chỉ nghĩ được cách dùng reader như trên và cập nhật lại chỉ số với những dòng sau dòng thay đổi thôi.
Nhờ mọi người giúp đỡ, mình cảm ơn.



ngocvinh
Guru
Guru
Bài viết: 699
Ngày tham gia: T.Tư 23/04/2008 8:14 am
Đến từ: Biên Hòa Đồng Nai
Been thanked: 112 time

Re: [VB.NET] Nhờ giúp đỡ tối ưu đọc dữ liệu từ database

Gửi bàigửi bởi ngocvinh » T.Năm 25/04/2019 1:44 pm

1- Dùng datatable từ bộ nhớ sẽ nhanh hơn đọc trực tiếp từ Database.
2- Dùng thêm các trường ngày tháng để lọc data thay vì xóa nham nhở.
.NET

afrendly
Bài viết: 7
Ngày tham gia: T.Hai 06/05/2013 12:09 pm
Has thanked: 1 time

Re: [VB.NET] Nhờ giúp đỡ tối ưu đọc dữ liệu từ database

Gửi bàigửi bởi afrendly » T.Năm 25/04/2019 2:05 pm

1. Oh. Mình quên mất vấn đề đọc trực tiếp từ file. Nhưng nếu đọc từ bộ nhớ mà dữ liệu lớn thì sẽ dẫn tới chiếm nhiều ram quá không bạn?
2. Mình không hiểu ý này. Bạn giải thích thêm được không?

ngocvinh
Guru
Guru
Bài viết: 699
Ngày tham gia: T.Tư 23/04/2008 8:14 am
Đến từ: Biên Hòa Đồng Nai
Been thanked: 112 time

Re: [VB.NET] Nhờ giúp đỡ tối ưu đọc dữ liệu từ database

Gửi bàigửi bởi ngocvinh » T.Năm 25/04/2019 10:45 pm

Máy tính giờ RAM dư xài
Data thêm các trường chứa ngày tháng để trích lọc từ ngày>đến ngày. SQL có hỗ trợ
.NET

afrendly
Bài viết: 7
Ngày tham gia: T.Hai 06/05/2013 12:09 pm
Has thanked: 1 time

Re: [VB.NET] Nhờ giúp đỡ tối ưu đọc dữ liệu từ database

Gửi bàigửi bởi afrendly » T.Năm 25/04/2019 11:47 pm

Mình sẽ thử và cân nhắc ý 1.
Về ý 2 mình vẫn không rõ ý bạn. Hơn nữa, dữ liệu mình dùng cũng không cần tới ngày tháng tạo hay lọc theo ngày tháng. Ở đây, mình cần cách đánh số lại cột chỉ số trong database. Cột này dùng để lưu thứ tự và cũng dựa vào đó để truy xuất dữ liệu dòng. Khi cần xoá 1 dòng, mình phải đánh số lại như đã nói. Tạm thời, mình chỉ nghĩ được cách dùng reader như trong code phía trên. Vậy có cách nào khác không?
Cảm ơn bạn đã phản hồi.

ncxn
Thành viên chính thức
Thành viên chính thức
Bài viết: 41
Ngày tham gia: T.Năm 27/01/2011 9:37 am
Has thanked: 1 time
Been thanked: 5 time

Re: [VB.NET] Nhờ giúp đỡ tối ưu đọc dữ liệu từ database

Gửi bàigửi bởi ncxn » T.Bảy 27/04/2019 9:39 am

Làm việc với database là không nên xóa rows, mà tạo một field dạng json (advanced) hoặc đơn giản là text ( simple) chứa status (available/edited/deleted...) -> Khi thao tác chỉ cần mask cái row đó tương ứng là xong.

Nếu rành về dạng json thì có thể chứa thêm các thông tin, ví dụ ( edited{user,times,old_value;...})

afrendly
Bài viết: 7
Ngày tham gia: T.Hai 06/05/2013 12:09 pm
Has thanked: 1 time

Re: [VB.NET] Nhờ giúp đỡ tối ưu đọc dữ liệu từ database

Gửi bàigửi bởi afrendly » T.Bảy 27/04/2019 7:42 pm

Mấy hôm nay tìm hiểu về database, tới giờ mình hiểu vấn đề xoá nham nhở như bạn @ngocvinh nói. Nếu bạn nói tới điều này rõ hơn thì đã tốt quá. Vì sao họ thiết kế database như vậy nhỉ? Vì sao không xoá thực sự dòng đó?
Về ý kiến của bạn @ncxn mình hiểu rồi. Nhưng có lẽ mình sẽ dùng xoá cho khoẻ thay vì gắn cờ vì cũng giảm bớt dung lượng database.
Mình đã thử thiết kế tạo lại cột chỉ số bằng cách xoá hết tất cả các dòng rồi tạo lại và tạo 1 bảng backup rồi xoá bảng gốc và đổi lại. Nhưng cả 2 cách đều rất chậm. Cách 1 không an toàn khi quá trình tạo lại bị lỗi hay mất điện chẳng hạn. Vậy nên cuối cùng mình vẫn loại bỏ 2 ý tưởng này và dùng xoá dòng.
Phần mềm của mình trước giờ dùng file text lưu trữ thôi. Giờ mình muốn dùng database để lưu trữ cho tối ưu hơn.
Cảm ơn 2 bạn đã góp ý.


Quay về “Visual Basic .NET và C# (VB.NET & C#)”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.7 khách