一个基于大型记录的数学数据库的平台是什么?


11

嗨,我是一位土木工程师,具有一定的编程经验,但是我对当今可用的各种选择并不熟悉。希望您能给我任何建议以最好的方式进行。

我想以网格格式制作和查询地面测量数据的数据库。在土方作业的各个时间,每个网格位置都会有很多测量值,因此存在第4维时间。

观察结果很可能会从文本文件中读取。在每个记录中,将有一个(2 x整数)个网格位置(行和列),一个(浮点)地平面以及各种字符串信息代码(总共最多30个字符)。

网格可以是大约10000行x 10000列。并非每次调查中网格上的每个位置都会有一个记录,但是通常它们最多会包含一百个记录。许多网格位置根本没有记录(该站点将不是完美的矩形)。

我想搜索记录,提取数据并进行计算,例如计算每个网格位置的最低或最高地面高度。我非常有信心,我能够使用数组使用FORTRAN,BASIC或C这样的语言简单地对此进行编程。尽管很多数组元素都是空的,但我想这并不是正确的方法,而像这样的大型数据库则需要特殊的工具,我将不得不学习如何使用它们。

我正在考虑该平台的可能选择-

  1. 使用数据库程序。我不熟悉这些功能的功能,但我想他们使用GUI会产生很多开销。

  2. 使用SQL?我对此了解不多,但这似乎是数据库的语言。我一直使用命令式语言而不是声明性语言,并且据维基百科了解,SQL是声明性语言,我对此变化感到有些紧张。我不完全了解使用它的过程。是否有制作控制台程序的编译器?数据库是否存储在磁盘上?很抱歉这样愚蠢的问题。

  3. 使用c-treeACE之类的API?我认为这可能是让我熟悉“​​先做然后再做”语言的一种方法(不幸的是,这是我作为工程师的想法!)。但是我希望API提供的后台内存和处理管理将优于我使用大型数组可以实现的功能。

  4. 还是我可以使用面向对象的语言来完成它,而让计算机担心存储需求。例如,如果我将记录存储为具有方法和属性的对象,这些方法和属性可以帮助我从每条记录中获取所需的结果,那么与3相比,这将是一个huge肿的程序吗?

可能有数亿条记录,我希望能够在运行Windows的现代PC上在几分钟而不是几小时(最好是几秒钟!)内查询和处理它们。更具体地说,我的是i6处理器,具有6Gb内存和120Gb SSD,运行Windows 7 64位。

希望有人有时间与新手分享一些智慧的话。


如果您可以在下午1到5之间的某个时间在线(甚至更晚一点),我们很乐意与您聊天以帮助您解决此问题。chat.stackexchange.com/rooms/179/the-heap(当然,在此之前可能会有一些英国佬)。我有一些特定的想法,例如“ 地理信息系统”可能会有所帮助。
jcolebrand

Answers:


9

有很多选择,请不要只局限于这里。特别是,您可能会发现数组本机数据库会有所帮助。我的答案将特别是关于您在基于SQL的数据库上的问题。

在我看来,这是一个地理空间信息问题。实际上,基于SQL的数据库在此类领域中使用得很好,但这也是数据库中的专业领域。

在该领域的SQL数据库中,带有PostGIS附加组件的PostgreSQL被认为是最好的SQL数据库之一。如果我是你,这就是我的起点。SQL的主要优点是,它为数据的重用保留了尚未考虑的灵活性。有了良好的地理空间支持,您就可以计算出大面积的距离,而不必担心球形触发的细节。

当然,这仅是非常大的网格的一个因素。对于较小的网格,可以忽略地球的曲率,PostgreSQL还具有一系列几何类型,包括可以使用的坐标系统上的点。我之所以这样说是因为尚不清楚要测量的区域有多大,以及是否可以假设平面几何形状。

即使如此,PostGIS仍可以通过允许在3维和4维几何坐标系上进行表示和计算来简化操作。

另请注意,您说的站点不一定是正方形的。在PostgreSQL中,您可以做的一件事情(使用几何类型或PostGIS)是为每个站点定义一个非矩形边界,以便在保存测量之前可以检查以确保一个点位于站点的边界内。

声明性语言影响

我认为这种担忧过分了。人们可以并且确实编写SQL查询,就好像它们是调用它们的程序的命令式语言的一部分一样。对于大多数查询而言,这无关紧要。

人们用声明性语言表示的是查询中的结构告诉数据库您想要什么信息,而不是如何获取信息。当您需要数据库中的复杂信息时,这一点很重要,因为从根本上讲,这意味着如果您可以提出正确的问题(并且您的数据有效),您将获得正确的答案。

但是,发生的最大区别是,长SQL查询比长命令式子例程更容易调试,这仅仅是因为人们可以更快地缩小查询中发生故障的位置。

这将如何工作

如果您选择这条路线,则可能会有一个数据库和一个以您选择的语言编写的程序。该程序会将查询发送到数据库并返回答案。您还可以(在PostgreSQL和许多其他关系数据库中)将查询放入函数中,然后由应用程序调用这些函数,从而提供更多的命令性或功能性接口。数据将存储在磁盘上,并可以通过与程序不同的单独软件进行访问。您也可以连接另一个程序(从MS Access到pgAdmin)并运行查询或生成报告。

本质上,您可以将RDBMS视为管理数据的“数学引擎”,并且您的程序可以与之交互以执行所需的操作。


1
抱歉,我迟到了,我一直很忙。非常感谢您提供详细的建议。我从SQL开始,在O'Reilly的书中学习,并按照书的建议下载了mySQl。我将研究postgreSQL GIS扩展的使用,并可能稍后再从C#访问SQL。再次感谢,我会回来的!
user19109 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.