Nền tảng nào cho một cơ sở dữ liệu toán học lớn dựa trên hồ sơ?


11

Xin chào Tôi là một kỹ sư xây dựng với một số kinh nghiệm lập trình nhưng tôi không quen với hàng loạt các tùy chọn có sẵn hiện nay. Hy vọng bạn có thể cho tôi bất kỳ con trỏ cách tốt nhất để tiến hành.

Tôi muốn thực hiện và truy vấn cơ sở dữ liệu về các phép đo khảo sát mặt đất theo định dạng lưới. Sẽ có nhiều phép đo cho từng vị trí lưới tại các thời điểm khác nhau thông qua công việc vận chuyển đất để có chiều thứ 4 về thời gian.

Các quan sát rất có thể sẽ được đọc từ một tệp văn bản. Trong mỗi bản ghi sẽ có một vị trí lưới (2 x số nguyên) (hàng và cột) một mức mặt đất (dấu phẩy động) và các mã thông tin chuỗi khác nhau (có thể có tổng cộng tối đa 30 ký tự).

Các lưới có thể có khoảng 10000 hàng x 10000 cột. Không phải mọi vị trí trên lưới sẽ có một bản ghi trong mỗi khảo sát, nhưng chúng thường có tới một trăm bản ghi. Rất nhiều vị trí lưới sẽ không có hồ sơ nào cả (trang web sẽ không phải là hình chữ nhật hoàn hảo).

Tôi muốn tìm kiếm các bản ghi, trích xuất dữ liệu và thực hiện các phép tính, ví dụ như tính toán mức mặt đất thấp nhất hoặc cao nhất cho từng vị trí lưới. Tôi khá tự tin rằng tôi sẽ có khả năng lập trình điều này khá đơn giản bằng một ngôn ngữ như FORTRAN, BASIC hoặc C bằng cách sử dụng mảng. Mặc dù vậy, rất nhiều phần tử mảng sẽ trống và tôi đoán rằng đây không phải là cách phù hợp để làm điều đó và các cơ sở dữ liệu lớn như thế này cần các công cụ đặc biệt mà tôi sẽ phải học cách sử dụng.

Tôi đang nghĩ về các tùy chọn có thể cho nền tảng -

  1. Sử dụng một chương trình cơ sở dữ liệu. Tôi không quen với việc chúng có thể mạnh đến mức nào nhưng tôi tưởng tượng chúng sẽ có nhiều chi phí hoạt động với GUI.

  2. Sử dụng SQL? Điều này tôi không biết nhiều nhưng nó dường như là ngôn ngữ cho cơ sở dữ liệu. Tôi đã luôn sử dụng các ngôn ngữ bắt buộc hơn là khai báo và như tôi hiểu từ wikipedia rằng SQL là khai báo, tôi hơi lo lắng về sự thay đổi. Tôi không hiểu đầy đủ về quy trình sử dụng nó. Có một trình biên dịch làm cho các chương trình giao diện điều khiển? Là cơ sở dữ liệu được lưu trữ trên đĩa? Xin lỗi vì những câu hỏi ngu ngốc như vậy.

  3. Sử dụng API như c-treeACE? Tôi nghĩ rằng đây có thể là cách để mang đến cho tôi sự quen thuộc của ngôn ngữ "làm điều này, sau đó làm điều đó" (thật không may, đây là cách tôi nghĩ như một kỹ sư!). Nhưng tôi hy vọng rằng bộ nhớ và quản lý xử lý hậu trường do API cung cấp sẽ vượt trội hơn so với những gì tôi có thể đạt được với các mảng lớn.

  4. Hoặc tôi có thể làm điều đó với một ngôn ngữ hướng đối tượng và để máy tính lo lắng về các yêu cầu lưu trữ. ví dụ: nếu tôi lưu trữ các bản ghi dưới dạng các đối tượng với các phương thức và thuộc tính sẽ giúp tôi nhận được kết quả tôi cần trong mỗi bản ghi - đó có phải là một chương trình cồng kềnh so với 3)

Có khả năng có hàng trăm triệu bản ghi và tôi muốn có thể truy vấn và xử lý chúng trong vài phút chứ không phải vài giờ (tốt nhất là vài giây!) Trên một PC hiện đại chạy windows. Cụ thể hơn, tôi là bộ xử lý i7 với ram 6Gb và SSD 120Gb chạy Windows 7 64 bit.

Hy vọng ai đó có thời gian để chia sẻ một vài lời khôn ngoan với một người mới.


Nếu bạn có thể trực tuyến vào khoảng 1 đến 5 giờ chiều (hoặc thậm chí muộn hơn sẽ rất tuyệt), chúng tôi rất muốn có bạn trong cuộc trò chuyện để giúp bạn điều này. chat.stackexchange.com/rooms/179/the-heap (có thể có một số người bạn đồng hành trước thời điểm đó). Tôi có một số suy nghĩ cụ thể như Hệ thống thông tin địa lý có thể giúp đỡ.
jcolebrand

Câu trả lời:


9

Có một số tùy chọn và xin đừng giới hạn câu trả lời của tôi ở đây. Cụ thể, bạn có thể tìm thấy các cơ sở dữ liệu bản địa để được giúp đỡ. Câu trả lời của tôi sẽ được cụ thể về các câu hỏi của bạn trên cơ sở dữ liệu dựa trên SQL.

Nghe có vẻ như đây là một câu hỏi về thông tin không gian địa lý. Các cơ sở dữ liệu dựa trên SQL trên thực tế được sử dụng trong các lĩnh vực như vậy khá tốt, nhưng đây cũng là một lĩnh vực chuyên môn trong cơ sở dữ liệu.

Trong số các cơ sở dữ liệu SQL trong lĩnh vực này, PostgreSQL, với bổ trợ PostGIS được coi là một trong những cơ sở dữ liệu tốt nhất. Nếu tôi là bạn, đây là nơi tôi sẽ bắt đầu. Ưu điểm chính của SQL là nó bảo vệ tính linh hoạt trong quá trình sử dụng lại dữ liệu của bạn cho các mục đích sử dụng mà bạn chưa từng nghĩ đến. Làm điều này với sự hỗ trợ không gian địa lý tốt có nghĩa là bạn có thể tính toán khoảng cách trên một khu vực rộng lớn mà không phải lo lắng về các chi tiết cụ thể của hình cầu.

Tất nhiên điều này chỉ trở thành một yếu tố với lưới rất lớn. Đối với các lưới nhỏ hơn, nơi mà độ cong của trái đất có thể bị coi nhẹ, PostgreQuery cũng có một loạt các loại hình học bao gồm các điểm trên một hệ tọa độ có thể được sử dụng. Tôi đề cập đến điều này bởi vì không rõ diện tích của một khu vực đang được khảo sát và liệu người ta có thể giả định hình học phẳng hay không.

Mặc dù vậy, PostGIS vẫn có thể đơn giản hóa mọi thứ bằng cách cho phép biểu diễn và tính toán trên các hệ tọa độ hình học 3 và 4 chiều.

Cũng lưu ý rằng bạn nói rằng các trang web của bạn không nhất thiết phải là hình vuông. Trong PostgreQuery, một điều bạn có thể làm (sử dụng các loại hình học hoặc PostGIS) là xác định ranh giới không phải hình chữ nhật cho mỗi trang web để bạn có thể kiểm tra để đảm bảo một điểm nằm trong giới hạn của trang web trước khi lưu phép đo.

Tác động ngôn ngữ khai báo

Mối quan tâm này tôi nghĩ là quá mức. Mọi người có thể và viết các truy vấn SQL như thể chúng là một phần của ngôn ngữ bắt buộc của chương trình mà họ đang gọi chúng từ đó. Đối với hầu hết các truy vấn của bạn, nó sẽ không thành vấn đề.

Ý nghĩa của mọi người đối với một ngôn ngữ khai báo là trong một truy vấn, cấu trúc sẽ cho cơ sở dữ liệu biết thông tin bạn muốn chứ không phải làm thế nào để có được nó. Điều này rất quan trọng khi bạn muốn thông tin phức tạp từ cơ sở dữ liệu vì về cơ bản, điều đó có nghĩa là nếu bạn có thể hỏi đúng câu hỏi (và dữ liệu của bạn là hợp lệ), bạn sẽ có câu trả lời đúng.

Tuy nhiên, sự khác biệt lớn xảy ra là các truy vấn SQL dài dễ gỡ lỗi hơn các chương trình con bắt buộc dài, đơn giản là vì người ta có thể nhanh chóng thu hẹp nơi truy vấn xảy ra sự cố.

Làm thế nào điều này sẽ làm việc

Rất có thể nếu bạn đi theo con đường này, bạn sẽ có một cơ sở dữ liệu và một chương trình được viết bằng ngôn ngữ bạn chọn. Chương trình sẽ gửi các truy vấn đến cơ sở dữ liệu và nhận lại câu trả lời. Bạn cũng có thể (trong PostgreSQL và nhiều DB quan hệ khác) đặt các truy vấn của bạn bên trong các hàm mà ứng dụng có thể gọi sau đó, cung cấp thêm giao diện bắt buộc hoặc chức năng. Dữ liệu sẽ được lưu trữ trên đĩa và được truy cập từ một phần mềm riêng biệt so với chương trình của bạn. Bạn cũng có thể kết nối với một chương trình khác (từ MS Access đến pgAdmin) và chạy truy vấn hoặc tạo báo cáo.

Về bản chất, bạn có thể nghĩ RDBMS là một "công cụ toán học" quản lý dữ liệu của bạn và chương trình của bạn tương tác với nó để làm những gì bạn cần.


1
xin lỗi vì trả lời trễ tôi đã rất bận Tôi thực sự đánh giá cao lời khuyên chi tiết của bạn sucg. Tôi đang bắt đầu với SQL, học với cuốn sách O'Reilly và vừa tải xuống mySQl theo khuyến nghị của cuốn sách. Tôi sẽ xem xét việc sử dụng phần mở rộng GIS postgreQuery và có thể truy cập SQL từ C # vào một ngày sau đó. Cảm ơn một lần nữa, tôi sẽ trở lại!
dùng19109
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.