问题标签 [lmdb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1752 浏览

database - lmdb(Symas Lightning 内存映射数据库)无法在​​ CentOS 上运行

lmdb 代码来自官方 git repo。

https://gitorious.org/mdb

它不适用于我的 mdb_env_open 返回代码 38 的项目。

lmdb 附带的测试代码也不起作用。

错误代码也是38,错误信息是“功能未实现”。

在 ubuntu 上编译的相同代码运行良好。

lmdb上的文档很少,我什至找不到返回码38是什么意思,stackoverflow中也没有对应的标签。

有高手吗?

==================================================== ====

我发现这是因为 NFS,将数据库移动到本地存储解决了这个问题。但是有什么解决方案可以在 NFS 中使用吗?本地存储空间太小。

0 投票
2 回答
2693 浏览

java-native-interface - LMDB的Java绑定,需要帮助刷新LMDB JNI

我们在 Java 应用程序中使用 LMDB。可用的 Java 绑定已有 1 年历史。我想刷新 LMDBJNI https://github.com/chirino/lmdbjni

但是,项目所有者没有提供有关如何构建项目的任何说明。所以我不能只克隆他的 git 存储库,然后删除新版本的 LMDB ( https://git.gitorious.org/mdb/mdb.git ) c 和 h 文件,然后重建它

LMDB JNI 下面似乎正在使用 hawkjni,但据我所知。

这些是我尝试过的步骤

a) git clone https://github.com/chirino/lmdbjni.git b) cd lmdbjni;mvn install 它成功完成,但是生成的 JAR 没有编译实际的 lmdb 库。所以我的测试程序失败了

c) 然后我想,我可能不仅仅能够为 lmdbjni 运行 mvn install,而是需要显式构建它的 64 位 Linux 子系统

所以我做了 cd lmdbjni/lmdbjni-linux64 mvn install

在那里我可以看到它试图运行配置脚本(由自动工具生成),但我得到了

所以我不太明白的是 lmdb 文件(lmdb.h、mdb.c、midl.h)是否需要显式删除,或者 hawkjni 是否需要在它们之前运行并创建某种“中间” c 和 h 文件稍后会被放入此构建环境中。


使用 LMDBJNI deephacks fork 更新时出现编译错误 重新编译的原因:DeepHacks 的 LMDBJNI 项目使用最新的 LMDB 生成了 LMDBJNI 的 maven 存档,但是它是用 Java 8 编译的(我们尚未使用)。所以我需要用 Java 7 重新编译它。

我修改了 pom.xml 并将 Sources 1.8 更改为 1.7 然后, mvn install -P linux64 产生错误

0 投票
0 回答
2368 浏览

multithreading - 在LMDB中,多个线程可以同时访问同一个数据库吗?

我正在考虑在 Web 应用程序中使用 LMDB,这当然是多线程的。

在 mdb_dbi_open 的 Symas 文档中,它声明“不得从多个并发事务中调用此函数。使用此函数的事务必须在任何其他事务可以使用此函数之前完成(提交或中止)。”

这似乎意味着多个线程不能同时访问(写入)给定的数据库。

但是概述指出“写入是完全序列化的;一次可能只有一个写入事务处于活动状态,这保证了写入者永远不会死锁。”,这似乎暗示我不需要担心它。

我的问题是:我需要序列化我的写事务还是 LMDB 会为我处理这些?

0 投票
2 回答
1531 浏览

python - 将非分布式数据库制作成分布式数据库的步骤【具体说说lmdb】

我正在处理 lmdb 和 lmdb 真的很快。但它的一个问题是 lmdb 不是分布式的。每次我需要进行一些维护时,lmdb 都必须关闭,并且站点会在几个小时内不可用。我正在研究使 lmdb 成为分布式的,实现复制功能。到目前为止,我最接近它的是 netflix 的dynomite代码库。
问题是它目前适用于 redis 和 memcache,但它说通用,因此它也可以用于 lmdb。我正在使用py-lmdb绑定与 python 处理 lmdb

我不知道如何从 python 世界中的 lmdb 角度处理它,因为代码也必须用 python 绑定编写。

任何帮助将不胜感激 。

0 投票
1 回答
1213 浏览

neural-network - 带有一个类/标签的 Caffe convert_imageset

我想从图像中创建一个 lmdb 数据集,其中一部分包含我希望 caffe 学习的功能,而其中一部分不包含。
我的问题是 - 在传输到 convert_imageset 的文本输入文件中 - 我应该如何标记那些不包含该功能的图像?
我知道格式是

但是我应该为没有该功能的图像分配哪个标签?
例如,img1.jpg 包含特征,img2.jpg 和 img3.jpg 不包含。那么文本文件应该看起来像 -

谢谢!

0 投票
2 回答
1614 浏览

c# - 在 C# 中等待 C++ 中的事件 - 作为任务或等待句柄

我主要使用 .NET 进行编程,我喜欢它的异步/并发原语,例如 Tasks、ResetEvents 等。今天,我第一次对 C++ 程序进行了有意义的更改,并了解了整个构建过程是如何工作的(我更新了 LigthningDB.NET 项目至 0.9.14)。但我仍然缺乏 C++ 知识。

我想添加到 LMDB 项目中的一个新功能(出于我自己的需要)是通知系统(类似于 Redis):

  • 我想要一个游标返回一个等待对象,该对象将在其表中的每个数据更改时发出信号。
  • 我想将一些数据与信号(指向数据结构的指针)一起获取,例如键或键+值。
  • 该对象将与游标一起放置,并且是游标的一部分,但它会在游标具有引用的 DB 中发出更改信号。
  • 这必须有一天(或某年)跨平台工作。如果他们完成这项工作,我可以接受任何肮脏的 Windows 特定的黑客攻击。

典型的用例是一个作家和 N 个读者在等待新消息。这将允许 IPC 和快速持久性二合一。LMDB 支持从不同进程并发读取(而 Esent 和 LevelDB 不支持)。

System.Threading原语可从 C++ 获得,我了解如何使用 WaitHandle 进行阻塞调用。有没有办法使这个异步?有很多关于异步同步原语的文章,但它们使用TaskCompletionSource并且仅在 .NET 内部有效。是否可以为本机互操作制定类似的解决方案?

一种解决方案可能是命名管道或套接字将更改转换为一个侦听器/调度程序(Redis 或Rhino.Queues样式),但性能会受到影响:写入必须分配、复制和推送数据,并且数据必须传输——比传递更糟糕指向已经在内存中的数据结构的指针。

另一种选择是将聆听光标移动到键并发送信号。发出信号后,C# 侦听器将知道光标在更新的键处具有值。这种方法解决了数据传输部分,但是使用 WaitHandles 它是阻塞的——在我的用例中阻塞比套接字 [分配/复制/延迟] 组合更糟糕。

有更好的选择吗?

附加问题:

  1. 我在这里重新发明自行车吗?
  2. 您能否指出.NET 程序等待(非阻塞)C/C++ 信号(如果存在)的开源库?
  3. 我应该为该工作流程使用 LMDB 吗?Windows 是我的优先事项,我在尝试让 LevelDB 工作时遇到了非常糟糕的时间(停止尝试)。对于 LMDB 所做的一切 + 信令,是否有更好的选择?

更新

在文档中找到了这个方法:

文档ThreadPool.RegisterWaitForSingleObject说:

等待操作由线程池中的一个线程执行。当对象的状态变为信号或超时间隔过去时,工作线程将执行委托。...等待线程使用 Win32 WaitForMultipleObjects函数来监视已注册的等待操作。

我是否正确,这是两个不同的线程,如果没有信号,第一个等待线程是唯一会阻塞的线程?

0 投票
2 回答
1983 浏览

lmdb - LMDB 中的子数据库有限制吗?

在这里发帖,因为我找不到 lmdb 键值存储的任何论坛。

子数据库有限制吗?同时打开的子数据库的合理数量是多少?

我想要大约 200 个数据库,这看起来很多,并且清楚地表明我的模型是错误的。我想可以在密钥本身中改造和嵌入每个数据库的 id 并只保留一个数据库,但是我有更长的密钥,如果需要我也不能删除数据库。

不过,如果 LMDB 已经为键使用某种内部前缀,我很感兴趣。任何如何解决该问题的建议表示赞赏。

0 投票
2 回答
7678 浏览

caffe - Caffe: Understanding expected lmdb datastructure for blobs

I'm trying to understand how data is interpreted in Caffe. For that I've taken a look at the Minst Tutorial Looking at the input data definition:

I've now looked at the mnist_train_lmdb and taken one of the entries (shown in hex):

(I've added the line breaks here to be able to see the '7' digit.)

Now my question is, where this format is described? Or put differently where is defined that the first 36 bytes are some sort of header and the last 8 bytes have some label correspondence?

How would I go about constructing my own data? Neither Blob Tutorial nor Layers Definition give much away about required formats. My intention is not to use image data, but time series

Thanks!

0 投票
2 回答
882 浏览

key-value - 在 LMDB 之上实现持久关联数组

我是键值存储的新手。我想尝试将 LMDB 作为持久关联数组,并希望能够使用长键,例如文件路径或 URL。

LMDB 定义了编译时常量 MDB_MAXKEYSIZE=511,对密钥长度施加了最大值。

我应该使用什么技术在 LMDB 之上实现持久的长密钥字典?某种散列和冲突解决方案?或者使用不同的 MAXKEYSIZE 重新编译,例如 2048?或者 LMDB 对于这项工作来说是一个错误的工具?

0 投票
3 回答
15711 浏览

python - 如何将 numpy 数组中的图像读入 PIL Image?

我正在尝试使用 PIL 从 numpy 数组中读取图像,方法是执行以下操作:

并收到以下错误:

我认为这是因为fromarray期望形状是(height, width, num_channels)但是我拥有的数组是形状(num_channels, height, width),因为它存储在lmdb数据库中。

如何重塑图像以使其兼容Image.fromarray