目前我们正在评估几个关键+值数据存储,以替换owr主应用程序当前使用的旧isam(20年左右!)......
问题是我们当前的isam不支持崩溃恢复.
所以LevelDB似乎对我们好(也检查BerkleyDB等)
但是我们遇到了热备份的问题,并且鉴于LevelDB是一个库,而不是服务器,要求"热备份"是很奇怪的,因为它直观地暗示了外部备份过程.
也许有人想提出选择(或已知的解决方案)?
例如: - 通过主要应用程序的内部线程进行热备份? - 仅通过复制LevelDB数据目录进行热备份?
提前致谢
我在Matlab中有一堆二维数据矩阵(没有图像数据,但有一些单精度数据).
有谁知道如何将2D matlab矩阵转换为caffe所需的leveldb格式来训练自定义神经网络?
我已经完成了关于如何训练图像(使用imagenet架构)和mnist(数字识别数据集)的教程.但是在后一个例子中,他们没有展示如何创建相应的数据库.在教程中,已经提供了数据库.
从http://code.google.com/p/leveldb/开始,似乎没有明确或容易将LevelDB与Go一起使用.但我真的想知道如何在Go中使用它.
谁能给我一个线索?
我正在编写一个简单的应用程序,Scala它通过leveldbjni库使用leveldb数据库.我的build.sbt文件看起来像这样:
name := "Whatever"
version := "1.0"
scalaVersion := "2.10.2"
libraryDependencies ++= Seq(
"org.iq80.leveldb" % "leveldb-api" % "0.6",
"org.fusesource.leveldbjni" % "leveldbjni-all" % "1.7"
)
Run Code Online (Sandbox Code Playgroud)
Object然后,An 负责创建数据库.不幸的是,如果我运行该程序,我会回到一个java.lang.UnsatisfiedLinkError由引擎盖下利用的hawtjni库引发的leveldbjni.
也可以通过scala控制台轻松触发错误:
scala> import java.io.File
scala> import org.iq80.leveldb._
scala> import org.fusesource.leveldbjni.JniDBFactory._
scala> factory.open(new File("test"), new Options().createIfMissing(true))
java.lang.UnsatisfiedLinkError: org.fusesource.leveldbjni.internal.NativeOptions.init()V
at org.fusesource.leveldbjni.internal.NativeOptions.init(Native Method)
at org.fusesource.leveldbjni.internal.NativeOptions.<clinit>(NativeOptions.java:54)
at org.fusesource.leveldbjni.JniDBFactory$OptionsResourceHolder.init(JniDBFactory.java:98)
at org.fusesource.leveldbjni.JniDBFactory.open(JniDBFactory.java:167)
at .<init>(<console>:15)
...
scala> System getProperty "java.io.tmpdir"
res2: String = /var/folders/1l/wj6yg_wd15sg_gcql001wchm0000gn/T/
Run Code Online (Sandbox Code Playgroud)
我无法理解正在发生的事情,因为从jar文件中正确地提取了库,但由于某些原因它没有被加载.
$ file /var/folders/1l/wj6yg_wd15sg_gcql001wchm0000gn/T/lib* …Run Code Online (Sandbox Code Playgroud) 当将ActiveMQ与大量持久性队列(250)á1000持久性TextMessagesá10 KB一起使用时,会出现问题。
一个场景需要这些消息在很长一段时间(几天)内保留在存储中,直到被消耗为止(为许多消费者分阶段分发大量数据以进行分发,这些数据可能会离线几天)。
在持久性存储中填充了这些消息之后,并且在代理重新启动之后,我们可以浏览/使用一些队列, 直到 30秒后调用#checkpoint。
此调用导致代理使用所有可用内存,而不会将其释放用于其他任务,例如队列浏览/使用。在内部,MessageCursor似乎决定内存不足,并停止将队列内容传送到浏览器/消费者。
=>有没有办法通过配置来避免这种行为,或者这是一个错误?
期望我们可以在任何情况下使用/浏览任何队列。
下面的设置已经投入生产了一段时间,并在ActiveMQ文档中应用了一些建议(目标策略,systemUsage,持久性存储选项等)。
除了上述设置之外,我们还对代理使用以下设置(顺便说一句:将memoryLimit更改为一个较小的值(如1mb)不会改变这种情况):
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">" producerFlowControl="false" optimizedDispatch="true" memoryLimit="128mb" timeBeforeDispatchStarts="1000">
<dispatchPolicy>
<strictOrderDispatchPolicy />
</dispatchPolicy>
<pendingQueuePolicy>
<storeCursor />
</pendingQueuePolicy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
<systemUsage>
<systemUsage sendFailIfNoSpace="true">
<memoryUsage>
<memoryUsage limit="500 mb" />
</memoryUsage>
<storeUsage>
<storeUsage limit="80000 mb" />
</storeUsage>
<tempUsage>
<tempUsage limit="1000 mb" />
</tempUsage>
</systemUsage>
</systemUsage>
Run Code Online (Sandbox Code Playgroud)
如果我们根据memoryUsage和可用堆空间之间的差异将destinationPolicy中的cursorMemoryHighWaterMark设置为较高的值(例如150或600),则可以缓解这种情况,但这对生产系统而言并不是真正的选择。视图。
带有来自Oracle Mission Control的信息的Screenie,显示了从未从内存释放的ActiveMQTextMessage实例:
#include <leveldb/status.h>
#include <leveldb/db.h>
#include <leveldb/write_batch.h>
...
int arg_offset = 0;
leveldb::DB* db1;
leveldb::Options options;
options.error_if_exists = true;
options.create_if_missing = true;
options.write_buffer_size = 268435456;
leveldb::WriteBatch* batch;
...
if (db_backend == "leveldb")
{
// leveldb
LOG(INFO) << "Opening leveldb " << argv[arg_offset+2];
leveldb::Status status1 = leveldb::DB::Open(options, argv[arg_offset+2], &db1);
CHECK(status1.ok()) << "Failed to open leveldb " << argv[arg_offset+2];
batch = new leveldb::WriteBatch();
}
Run Code Online (Sandbox Code Playgroud)
上面的代码段会生成以下错误
$ g++ tools/convert_imageset_and_disparity.cpp -MMD -MP -pthread -fPIC -DCAFFE_VERSION=1.0.0-rc5 -DNDEBUG -O2 -DUSE_OPENCV -DUSE_LEVELDB -DUSE_LMDB -DWITH_PYTHON_LAYER -I/usr/include/python3.5m -I/usr/lib/python3.5/dist-packages/numpy/core/include -I/usr/local/include -I/usr/include/hdf5/serial …Run Code Online (Sandbox Code Playgroud) 通过 CocoaPods 更新 Firebase 后,我遇到了此问题。
任何帮助是极大的赞赏。
任何高于 4.0.2 的 Firebase 版本都会在 Xcode(版本 10.1)中导致相同的错误。
错误:
Swift 编译器错误
找不到“字符串”文件
无法构建 Objective-C 模块“CoreFoundation”
已经尝试过:
清洁项目
手动添加SDK
删除级别数据库并手动添加
问题出在哪里?使用 Swift 文件/标头?用leveldb?还是火力基地?
相关(GitHub 上的类似问题,但那里建议的解决方案对我不起作用):
https://github.com/google/leveldb/issues/515
Xcode 消息:
> <module-includes>:1:9: note: in file included from
> <module-includes>:1:
> #import "Headers/CoreFoundation.h"
> ^ /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h:43:10:
> note: in file included from
> /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h:43:
> #include <CoreFoundation/CFBase.h>
> ^ /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:72:10:
> note: in file included from
> /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:72:
> #include <Block.h>
> ^ /Users/Besfort/Desktop/Coding/Xcode - projects/0.1/Pods/leveldb-library/table/Block.h:10:10: note: in file …Run Code Online (Sandbox Code Playgroud) 我正在尝试从 .ldb 文件中提取数据。Chrome 扩展 OneTab 出现故障,我正在尝试恢复它保存的链接。我相信我已经从一篇旧的博客文章中找到了解决方案,但我对编码了解不够,无法弄清楚如何遵循。
以下是博客文章的链接: https://antimatter15.com/2015/12/recovering-deleted-data-from-leveldb/
我相信我已经按照他的建议正确完成了构建 Go 应用程序的所有操作。它创建了一个名为“ldbdump”的文件,没有文件扩展名。下一步是我遇到麻烦的地方。我尝试在 Jupyter Notebook 中运行他的 Python 代码(这是我唯一使用过 Python 的软件,而且经验有限),但只会出现错误。
我正在使用的原始代码可以在上面的“恢复”标题下的链接中找到。我将“base”的定义从“test-stuff copy”更改为指向包含我尝试读取的 .ldb 文件以及“ldbdump”文件的文件夹。出现错误后,我还更改了底部打印命令的语法。其他一切都被搁置了。
base = "D:\\Downloads\\ldb archive"
import os
from subprocess import Popen, PIPE
import json
import ast
for f in os.listdir(base):
if f.endswith(".ldb"):
process = Popen(["ldbdump", os.path.join(base, f)], stdout=PIPE)
(output, err) = process.communicate()
exit_code = process.wait()
for line in (output.split("\n")[1:]):
if line.strip() == "": continue
parsed = ast.literal_eval("{" + line + "}")
key = parsed.keys()[0]
print(json.dumps({ "key": key.encode('string-escape'), "value": parsed[key] …Run Code Online (Sandbox Code Playgroud) 我知道 Cassandra、rocksdb 等 DBS 中的分级压缩是如何工作的。有些级别的最大数量为 4,有些级别为 7。这个数字如何影响压缩过程?为什么我不能只有 2 个级别,第一个已刷新内存表数据(文件之间可能重叠)和第二个包含非重叠 SST?
如果有任何文档或重复问题,请重定向。
编辑 1:当级别数增加时,重复数据会增加。
在 badgerDB 中,我们有数十亿个类型的键string和类型的值HashValueList。在我们的用例中,长度HashValueList可能以百万计。[]byte在插入 BadgerDb 之前,我们必须对键和值进行编码;我们正在使用该encoding/gob包。因此,每当我们需要值时,我们就必须再次解码它们。在我们的例子中,这个解码过程会产生开销。
type HashValue struct {
Row_id string
Address string
}
type HashValueList []HashValue
Run Code Online (Sandbox Code Playgroud)
为了减轻解码开销,我们将设计更改为前缀迭代。通过前缀迭代,我们将集合中的每个值存储为不同的 Badger KV 对,而不是具有大值的单个键。键的前缀将是原始哈希值键。然后,我们需要添加一个后缀,以提供原始集合中值集合的唯一性。所以在你原来的方案中有类似的东西:
k1 -> [v1, v2, v3, ..., vn]
...
km -> [w1, ..., wm]
Run Code Online (Sandbox Code Playgroud)
现在有类似的东西:
k1@1 -> v1
k1@2 -> v2
k1@3 -> v2
...
k1@n -> vn
...
km@1 -> w1
...
km@m -> wm
Run Code Online (Sandbox Code Playgroud)
为了从 DB 中查找值,我们有 n 个 goroutine 读取通道KeyChan并将值写入ValChan。
func Get(db *badger.DB, …Run Code Online (Sandbox Code Playgroud)