可以从多个Python脚本访问内存中的数据库?

可以从多个Python脚本访问内存中的数据库?,python,database,Python,Database,我正在搜索一个快速的内存数据库,它允许定义、初始化和操作一个大型浮动矩阵(大约大小10000000 x 10) 此内存数据库必须满足以下要求: (1)开源,易于在Linux环境中安装 (2)有一个现有的、易于使用的python模块,可以与之交互 (3)完全在内存中,并且可索引(不需要查询/sql) (4)允许少数不同的python脚本(同时运行…)访问相同的矩阵并从中读取/更新它(注意:更新必须是原子的,因此DB应该知道如何处理并发性) 下面是我要做的:我有两个不同的python脚本同时运行。

我正在搜索一个快速的内存数据库,它允许定义、初始化和操作一个
大型浮动矩阵
(大约大小
10000000 x 10

内存数据库必须满足以下要求:

(1)开源,易于在
Linux
环境中安装

(2)有一个现有的、易于使用的
python
模块,可以与之交互

(3)完全在内存中,并且可索引(不需要查询/sql)

(4)允许少数不同的
python
脚本(同时运行…)访问相同的矩阵并从中读取/更新它(注意:更新必须是原子的,因此DB应该知道如何处理并发性)


下面是我要做的:我有两个不同的
python
脚本同时运行。它们都运行在同一台机器上,但相互独立——彼此之间什么也不共享

我试图让他们都使用
相同的输出矩阵
来更新他们的结果(我希望他们的所有结果都存储在一个大矩阵中)

因此,我需要一个解决方案,允许所有人读取更新*相同的矩阵*

理想情况下,将使用以下代码行进行更新:

myMatrix[a][b] = 23.44
如您所见,sql是不需要的,因为每个python脚本都将直接操作矩阵


只要符合上述标准,我愿意考虑任何解决办法。有什么建议吗


编辑:我不必使用矩阵;键/值数据库也可以工作。

一种完全不同的方法。出于您的目的,呼吸机和接收器角色可能会合并为一个,当然,只有呼吸机能够决定需要向工作人员发送哪些数据时,它才会起作用,除非您使用共享内存解决方案对其进行补充


编辑:该模式仍然有效,但python有自己的队列系统,这可能就足够了。可以帮助您入门。

一种完全不同的方法。出于您的目的,呼吸机和接收器角色可能会合并为一个,当然,只有呼吸机能够决定需要向工作人员发送哪些数据时,它才会起作用,除非您使用共享内存解决方案对其进行补充


编辑:该模式仍然有效,但python有自己的队列系统,这可能就足够了。可以帮助您入门。

可能适合您的需要。它在内存中的键/值DB很快。它具有存储元素序列的类型,但它实现为链表而不是数组。所以在10M列表中通过索引访问元素可能不会这么快。但如果矩阵有10M x 10个元素,则可以有10M个关键点。Redis还支持交易。

可能会满足您的需要。它在内存中的键/值DB很快。它具有存储元素序列的类型,但它实现为链表而不是数组。所以在10M列表中通过索引访问元素可能不会这么快。但如果矩阵有10M x 10个元素,则可以有10M个关键点。Redis也支持事务。

听起来你不需要数据库。你经常看numpy吗?您可以在进程之间共享相同的内存(并将其映射为一个numpy数组),尽管有一些注意事项和无数不同的方法。搜索“numpy共享内存”或类似内容。我很困惑:独立,不共享任何内容,但你希望他们能够阅读矩阵?Joe Kington,a
numpy ndarray
正是我需要的!我不知道您可以在不同的进程之间共享相同的
numpy ndarray
;你能提供更多的例子吗?fvu,这是我的错。不同的进程确实共享了
输出矩阵
——它们都应该能够从中读取/更新它。那么,听起来你不需要数据库。你经常看numpy吗?您可以在进程之间共享相同的内存(并将其映射为一个numpy数组),尽管有一些注意事项和无数不同的方法。搜索“numpy共享内存”或类似内容。我很困惑:独立,不共享任何内容,但你希望他们能够阅读矩阵?Joe Kington,a
numpy ndarray
正是我需要的!我不知道您可以在不同的进程之间共享相同的
numpy ndarray
;你能提供更多的例子吗?fvu,这是我的错。不同的进程共享
输出矩阵
——它们都应该能够从中读取/update it.fvu,谢谢。是的,
zmq
带呼吸机和水槽绝对是一种选择。让我问你:呼吸机能否处理10个不同的
python
脚本,每个脚本每2秒左右发送一次
3[MB]
?我对zmq所做的大多数基准测试都是在非常小的嵌入式机器上进行的,甚至性能都非常出色。我认为可用带宽最终将是最大的限制因素。在我发送给您的页面上,您将发现可以用Python运行实现,修改这些实现以适合您的用例并执行一些基准测试可能是一个好主意。fvu,谢谢。是的,
zmq
带呼吸机和水槽绝对是一种选择。让我问你:呼吸机能否处理10个不同的
python
脚本,每个脚本每2秒左右发送一次
3[MB]
?我对zmq所做的大多数基准测试都是在非常小的嵌入式机器上进行的,甚至性能都非常出色。我认为可用带宽最终将是最大的限制因素。在我发给你的那一页上,你可以找到ready-t