首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫HDF5数据库

熊猫HDF5数据库
EN

Stack Overflow用户
提问于 2014-03-20 02:55:19
回答 3查看 9.8K关注 0票数 15

去年我一直在使用蟒蛇熊猫,它的性能和功能给我留下了深刻的印象,但是熊猫还不是一个数据库。最近我一直在考虑如何将熊猫的分析功能集成到一个平面的HDF5文件数据库中。不幸的是,HDF5不是为处理并发性而设计的。

我一直在寻找锁定系统、分布式任务队列、并行HDF5、平面文件数据库管理器或多处理的灵感,但我仍然不清楚从哪里开始。

最终,我希望有一个RESTful API来与HDF5文件交互,以创建、检索、更新和删除数据。这方面的一个可能的用例是建立一个时间序列存储,传感器可以在其中写入数据,并在上面实现分析服务。

任何关于可能遵循的途径、现有的类似项目或整个想法的方便/不便的想法都将不胜感激。

PD:我知道我可以使用一个SQL/NoSQL数据库来存储数据,但是我想使用HDF5,因为在检索大量数据时,我没有看到任何更快的东西。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-20 11:58:42

HDF5适用于并发只读访问。

对于并发写访问,您要么必须使用parallel HDF5,要么有一个工作进程负责编写HDF5存储。

有一些努力将HDF5与的RESTful API结合起来。有关更多细节,请参见herehere。我不知道它有多成熟。

我建议使用混合方法,并通过RESTful API公开它。

您可以将元信息存储在SQL/NoSQL数据库中,并将原始数据(时间序列数据)保存在一个或多个HDF5文件中。

有一个公共REST来访问数据,用户不必关心窗帘后面发生了什么。

这也是我们存储生物信息的方法。

票数 13
EN

Stack Overflow用户

发布于 2015-03-12 15:48:41

我知道下面这个问题不是一个很好的答案,但它非常适合我的需要,而且我发现它没有在其他地方实现:

代码语言:javascript
复制
from pandas import HDFStore
import os
import time

class SafeHDFStore(HDFStore):
    def __init__(self, *args, **kwargs):
        probe_interval = kwargs.pop("probe_interval", 1)
        self._lock = "%s.lock" % args[0]
        while True:
            try:
                self._flock = os.open(self._lock, os.O_CREAT |
                                                  os.O_EXCL |
                                                  os.O_WRONLY)
                break
            except FileExistsError:
                time.sleep(probe_interval)

        HDFStore.__init__(self, *args, **kwargs)

    def __exit__(self, *args, **kwargs):
        HDFStore.__exit__(self, *args, **kwargs)
        os.close(self._flock)
        os.remove(self._lock)

我用这个作为

代码语言:javascript
复制
result = do_long_operations()
with SafeHDFStore('example.hdf') as store:
    # Only put inside this block the code which operates on the store
    store['result'] = result

在同一个存储上工作的不同进程/线程将简单地排队。

请注意,如果您天真地从多个进程对存储进行操作,那么最后一次关闭存储将“获胜”,而其他人“认为他们已经编写”的内容将丢失。

(我知道我可以让一个进程来管理所有的写操作,但是这个解决方案避免了酸洗的开销)

编辑: "probe_interval“现在可以调优(如果频繁写入,那么一秒就太多了)

票数 8
EN

Stack Overflow用户

发布于 2015-03-02 15:16:19

HDF现在为HDF5提供REST服务:http://hdfgroup.org/projects/hdfserver/

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22522551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档