无方案数据库解决方案只能在一台机器上工作?

时间:2011-04-08 03:38:34

标签: python linux mongodb database nosql

我正在寻找一个无方案数据库来在磁盘上存储大约10 [TB]数据,理想情况下,使用python客户端。建议的解决方案应该是免费的商业用途,并且具有良好的读写性能。

这里的主要目标是存储时间序列数据,包括由time stamp访问的超过十亿条记录。

数据将存储在以下方案中:

KEY - > “FIELD_NAME.YYYYMMDD.HHMMSS”

VALUE - > [v1,v2,v3,v4,v5,v6](v1..v6只是floats

例如,假设:

FIELD_NAME =“TOMATO”

TIME_STAMP =“20060316.184356”

VALUES = [72.34,-22.83,-0.938,0.265,-2047.23]

我需要能够检索 VALUE (整个数组)给定FIELD_NAME&的组合。 TIME_STAMP

查询 VALUES [“ TOMATO.20060316.184356 ”]将返回矢量[72.34,-22.83,-0.938,0.265,-2047.23]。数组的读取应该尽可能快。

然而,我还需要一种方法来存储(就地)数组中的标量值。假设我想将时间戳TOMATO上的2006/03/16.18:43:56的第一个元素指定为500.867。在这种情况下,我需要有一个快速机制来执行此操作 - 例如:

VALUES [“ TOMATO.20060316.184356 ”] [0] = 500.867(这会在磁盘上更新)

MangoDB这样的东西可以运作吗?我将使用一台机器(不需要复制等),运行Linux。

澄清:只有一台计算机将用于存储数据库。但是,我需要一个解决方案,允许多台计算机连接到相同的数据库并更新/插入/读取/写入数据。

4 个答案:

答案 0 :(得分:4)

MongoDB可能是与性能,灵活性和可用性相关的一个很好的选择(易于接近)。但是,大型数据库需要仔细规划 - 特别是在备份和高可用性方面。如果没有对项目要求的进一步了解,几乎无法说明一台机器是否足够(如果需要选项比例,请查看副本集和分片)。

更新:根据您的新信息 - 应该可以使用MongoDB(测试和评估它)。 Easilyy口语:MongoDB可以是NoSQL数据库的“MySQL”....如果你了解SQL数据库,那么你应该能够轻松地使用MongoDB,因为它从SQL世界借鉴了很多想法和概念。查看您的数据模型......这很简单,数据可以轻松检索和存储(不详细说明)。我建议下载MongoDB并浏览教程。

答案 1 :(得分:3)

MongoDB实例可以允许多台计算机访问它。但是,您必须为服务器提供特殊的命令行参数,以便允许它这样做。您应该搜索MongoDB文档,它非常全面。 mongodb的身份验证模型的文档是here。它描述了如何以安全模式运行Mongo以及如何限制可以绑定到它的ip范围。

答案 2 :(得分:2)

MongoDB会起作用。无论如何看我的要求,我都会强烈推荐Redis。

Redis是一个数据结构商店。您可以将数组存储为值并使用键访问它们。它易于设置/使用,速度非常快。它也适用于一台机器服务器和其他方式。

Redis可以使用优秀的python客户端,例如Rediscoredis-natives-py和redis-wrap或者最简单的redis-py。

答案 3 :(得分:1)

另一个需要考虑的选项是Berkeley DBBerkeley DB Java Edition。 BDB是一个C库,其中BDB JE是一个Java库。两者都提供了多个用于存储数据的API,包括键值对API(NoSQL),Java Collections API和Java Direct Persistence Layer(类似POJO)API。

任何一个库都可以在单个系统上管理10TB存储库。两者都提供HA功能,允许您将数据库(以及任何更改)复制到多个系统。读取可以发送到主服务器或任何副本(提供负载平衡)。必须将更新发送给主服务器。我们的客户今天在这种设置中使用Berkeley DB。 Berkeley DB已存在多年,这正是我们做得很好的应用程序。

免责声明:我是Berkeley DB的产品经理,所以我有点偏颇。 : - )