thucgia > 11-09-15, 04:36 PM
(11-09-15, 10:56 AM)hoanbhxhls Đã viết:(09-09-15, 09:36 PM)maidinhdan Đã viết:-Mình nghĩ kể cả khi viết bằng VB.NET 1 cá nhân viết cho mô hình database tập chung cho 200 người dùng cũng khó mà đáp ứng được(09-09-15, 03:17 PM)quocdung9999 Đã viết: Mình có một số vấn đề muốn hỏi mong mọi người giúp đỡ nhé.
Hiện tại mình đang làm phần mềm access, bên công ty mình khoảng có 200 User, mình dùng link table để kết nối các User để sử dụng cùng một database , vì công ty mình dùng mạng lan nên việc đó thực hiện cũng khá đơn giản...
Email: quocdung1222@gmail.com
Một số góp ý trước khi bắt đầu:
1. Xác định lại khả năng lập trình code của bản thân tới đâu. ( ý này không phải chê bay mà có thể làm bạn bỏ cuộc nửa chừng cho 200 cái User)
2. Việc link table qua LAN đến 200 User sử dụng. Vấn đền này không cần đến 200 đâu, chỉ cần 3 User đăng nhập cùng lúc thôi là đủ làm bạn điên đầu rồi. Bởi lúc đó cần phải giải quyết rất nhiều vấn đề:
- Load chậm, có khi mở mà không lên.
- Lấy số chứng từ hoặc Mã khóa gì đó...
3. Đã là 200 người chứng tỏ công ty bạn rất lớn, mà lớn như vậy đòi hỏi bảo mật phải cao, an toàn. Riêng Access mình nghĩ không phù hợp đâu.
=> Từ 1+2+3 suy ra: Thuê 1 người chuyên lập trình viết mình nghĩ là hay nhất. Tốt nhất viết bằng VB.NET
Thân mến!
-Nói chung lập trình viên việt nam cơ bản chỉ viết theo mô hình client/server
-Theo mình nên mua phần mềm của các công ty có uy tín,thương hiệu
-Các hệ thống lớn như ngân hang,bảo hiểm dùng hoàn toàn phần mềm của nước ngoài
-Mô hình lập trình của họ ít nhất là 3 lớp thậm chí là nhiều hơn
Noname > 11-09-15, 05:41 PM
quocdung9999 > 12-09-15, 05:31 PM
lehongduc > 25-10-15, 11:37 AM
(09-09-15, 03:17 PM)quocdung9999 Đã viết: - Chào tất cả các bạn!Chào Bạn,
Mình có một số vấn đề muốn hỏi mong mọi người giúp đỡ nhé.
Hiện tại mình đang làm phần mềm access, bên công ty mình khoảng có 200 User, mình dùng link table để kết nối các User để sử dụng cùng một database , vì công ty mình dùng mạng lan nên việc đó thực hiện cũng khá đơn giản, mình chia ra 2 phần, một phần dữ liệu và phần code và giao diện. Khi người nào muốn sử dụng thì copy phần giao diện về và mình cấp quyền sử dụng trên database đó, nhưng mình có phát sinh một vấn đề xung đột khi 2 người cùng sử dụng Một mã, như một người update một người delete hoặc 2 người cùng update. Mình cũng chưa tìm ra nguyên nhân khắc phục, theo như mình biết nếu CSDL SQL thì có thể bắt được lỗi này, còn access thì mình chưa biết phải làm thế nào. Bạn nào biết cho mình ý kiến với. Rất cảm ơn nếu được giúp đỡ.
Email: quocdung1222@gmail.com
Thanks!
thucgia > 25-10-15, 05:46 PM
(11-09-15, 05:41 PM)Noname Đã viết: Theo mình vấn đề nằm ở giải thuật. Vì vậy anh chị nên tập trung vào đây để hoàn thiện chương trình của mình.
Hệ quản trị Cơ sở dữ liệu và ngôn ngữ chỉ giúp ta những vấn đề sau:
1- Bảo mật. Mình lấy ví vụ với MS SQL server, nó phân lớp user, chia người quản trị dữ liệu (SA) và người sử dụng dữ liệu (user) (read/write..) làm 2 khối riêng. Như vậy, sẽ an toàn hơn rất nhiều so với MS Access vốn tích hợp tất cả trong 1.
2- Dung lượng lưu trữ. Việc này ai dùng Access đều biết. Có thể kết hợp bằng cách cho MS SQL Server làm backend
3- Khả năng chịu lỗi. Các bạn cũng biết là MS Access rất hay corrupt.
4- Tốc độ xử lý: Từ SQL 2005 trở đi, Microsoft đã theo kịp Oracle trong việc biến MS SQL server thành 1 hệ điều hành chứ không chỉ là hệ quản trị cơ sở dữ liệu. Có nghĩa là nó can thiệp sâu xuống phần cứng để giảm delay do hệ điều hành điều khiển. Trong khi đó, MS Access chỉ đơn thuần là một module của bộ MS Office.
Ngoài ra thì đối với xử lý dữ liệu MS Access xử lý khá tốt nếu ta có giải thuật tốt.
Trở lại vấn đề xử lý xung đột, bạn phải có giải thuật cho các vấn đề sau bất kể là đang dùng ngôn ngữ gì, trình quản trị dữ liệu gì:
- Kịch bản khi truy xuất đến dữ liệu. Khi load 1 record lên. Record đó có ai đang sửa không?
- Kịch bản khi tạo 1 record mới. Lưu ý khi cả 2 user cùng tạo record mới thì về mặc lý luận ta giải quyết thế nào, sau đó mới thực hiện lý luận đó.
- Kịch bản khi lưu 1 record.
- Hệ thống bẫy lỗi. Bẫy lỗi tốt sẽ giúp rất nhiều cho user và cả người quản trị.
Mình tin rằng khi bạn trang bị đủ về mặc lý luận rồi bắt tay vào hiện thực nó thì sẽ không gặp khó khăn nữa.
Lấy ví dụ về cách xử lý trong chương trình Scala. http://www.epicor.com/uk/products/iscala.aspx
Họ giải quyết vấn đề như sau:
- Tạo 1 table lưu trạng thái tất cả user bao gồm: tên user, module, table, record, thời gian
- Khi 1 user load 1 record, họ sẽ thêm trạng thái vào table trên, tạo các cảnh báo nếu record đã có người dùng…
- Khi tạo 1 record mới, họ chưa vội tạo khóa chính và cho màn hình nhập liệu kết nối tới 1 table tạm, table này là bản sao cấu trúc so với table chính. Khi lưu record, họ copy data từ table tạm sang table chính, tạo khóa chính…
Trên đây là ví dụ với Scala mình từng dùng. Một số chương trình lớn khác cũng có những giải thuật riêng cho việc này. Nói như vậy để chứng minh quan điểm của mình về tầm quan trọng của giải thuật. Các bạn cần tập trung nghiên cứu theo hướng này. Chỉ khi nào cần cải thiện 4 vấn đề mình nêu ở trên thì hãy nghĩ đến việc thay đổi hệ quản trị cơ sở dữ liệu hoặc chuyển sang ngôn ngữ khác.
Public Function CreateOrder(lngCompanyID As Long)
On Error GoTo ErrorHandler
Dim ws As DAO.Workspace
Dim db As DAO.Database
Set ws = DBEngine.Workspaces(0) 'Use default workspace
Set db = ws.Databases(0) 'Use default database
With db
ws.BeginTrans
.Execute "...", dbFailOnError 'Some SQL statements
.Execute "...", dbFailOnError 'More SQL statements
'... do whatever else needs to be done within the transaction.
ws.CommitTrans
End With
ExitProcedure:
Set db = Nothing
Set ws = Nothing
Exit Function
ErrorHandler:
MsgBox Err.Description, vbInformation, "ErrorL"
ws.Rollback
Resume ExitProcedure
End Function
thucgia > 25-10-15, 05:49 PM
(11-09-15, 05:41 PM)Noname Đã viết: Theo mình vấn đề nằm ở giải thuật. Vì vậy anh chị nên tập trung vào đây để hoàn thiện chương trình của mình.
Hệ quản trị Cơ sở dữ liệu và ngôn ngữ chỉ giúp ta những vấn đề sau:
1- Bảo mật. Mình lấy ví vụ với MS SQL server, nó phân lớp user, chia người quản trị dữ liệu (SA) và người sử dụng dữ liệu (user) (read/write..) làm 2 khối riêng. Như vậy, sẽ an toàn hơn rất nhiều so với MS Access vốn tích hợp tất cả trong 1.
2- Dung lượng lưu trữ. Việc này ai dùng Access đều biết. Có thể kết hợp bằng cách cho MS SQL Server làm backend
3- Khả năng chịu lỗi. Các bạn cũng biết là MS Access rất hay corrupt.
4- Tốc độ xử lý: Từ SQL 2005 trở đi, Microsoft đã theo kịp Oracle trong việc biến MS SQL server thành 1 hệ điều hành chứ không chỉ là hệ quản trị cơ sở dữ liệu. Có nghĩa là nó can thiệp sâu xuống phần cứng để giảm delay do hệ điều hành điều khiển. Trong khi đó, MS Access chỉ đơn thuần là một module của bộ MS Office.
Ngoài ra thì đối với xử lý dữ liệu MS Access xử lý khá tốt nếu ta có giải thuật tốt.
Trở lại vấn đề xử lý xung đột, bạn phải có giải thuật cho các vấn đề sau bất kể là đang dùng ngôn ngữ gì, trình quản trị dữ liệu gì:
- Kịch bản khi truy xuất đến dữ liệu. Khi load 1 record lên. Record đó có ai đang sửa không?
- Kịch bản khi tạo 1 record mới. Lưu ý khi cả 2 user cùng tạo record mới thì về mặc lý luận ta giải quyết thế nào, sau đó mới thực hiện lý luận đó.
- Kịch bản khi lưu 1 record.
- Hệ thống bẫy lỗi. Bẫy lỗi tốt sẽ giúp rất nhiều cho user và cả người quản trị.
Mình tin rằng khi bạn trang bị đủ về mặc lý luận rồi bắt tay vào hiện thực nó thì sẽ không gặp khó khăn nữa.
Lấy ví dụ về cách xử lý trong chương trình Scala. http://www.epicor.com/uk/products/iscala.aspx
Họ giải quyết vấn đề như sau:
- Tạo 1 table lưu trạng thái tất cả user bao gồm: tên user, module, table, record, thời gian
- Khi 1 user load 1 record, họ sẽ thêm trạng thái vào table trên, tạo các cảnh báo nếu record đã có người dùng…
- Khi tạo 1 record mới, họ chưa vội tạo khóa chính và cho màn hình nhập liệu kết nối tới 1 table tạm, table này là bản sao cấu trúc so với table chính. Khi lưu record, họ copy data từ table tạm sang table chính, tạo khóa chính…
Trên đây là ví dụ với Scala mình từng dùng. Một số chương trình lớn khác cũng có những giải thuật riêng cho việc này. Nói như vậy để chứng minh quan điểm của mình về tầm quan trọng của giải thuật. Các bạn cần tập trung nghiên cứu theo hướng này. Chỉ khi nào cần cải thiện 4 vấn đề mình nêu ở trên thì hãy nghĩ đến việc thay đổi hệ quản trị cơ sở dữ liệu hoặc chuyển sang ngôn ngữ khác.
Public Function CreateOrder(lngCompanyID As Long)
On Error GoTo ErrorHandler
Dim ws As DAO.Workspace
Dim db As DAO.Database
Set ws = DBEngine.Workspaces(0) 'Use default workspace
Set db = ws.Databases(0) 'Use default database
With db
ws.BeginTrans
.Execute "...", dbFailOnError 'Some SQL statements
.Execute "...", dbFailOnError 'More SQL statements
'... do whatever else needs to be done within the transaction.
ws.CommitTrans
End With
ExitProcedure:
Set db = Nothing
Set ws = Nothing
Exit Function
ErrorHandler:
MsgBox Err.Description, vbInformation, "ErrorL"
ws.Rollback
Resume ExitProcedure
End Function
quocdung9999 > 11-03-17, 04:12 PM