我正在寻找一个类似dbm的库,我可以使用它代替Berkeley DB,我目前正在使用它.我转换的主要原因是BDB的许可费用相当高(开源应用程序免费,但我的雇主不希望出于各种原因开源这个特定的应用程序).
我简要地看了一下qdbm,但看起来它不会满足我的需求 - 很多键(几百万)和大数据项(> 1-5兆字节).在我继续搜索之前,我想我会问,因为似乎有大量类似dbm的库.
任何人都可以为Java推荐一个轻量级,快速且有希望稳定的B树(或类似)库吗?
基本上我正在寻找磁盘上的地图; BerkeleyDB JE除了我不需要事务之外,对于只读并发很好,需要大约1/10大小(BSD或Apache许可证也很好).
需要纯Java,所以没有东京/京都机柜.
实现相关Collections接口将是一个加号(或者,原始类型的模板化接口也会很好).
JDBM看起来相当不错,但它似乎在2005年被放弃了(1.0,不低于).
还有DiskBackedMap,但他们一年前发布了一个alpha版本,此后一无所获.
还有别的吗?或者上述任何经历?
我不想要的东西:
我已经将GDBM和Berkeley DB/DB_File用于早期的Perl项目,但是我应该将它们用于新项目吗?不同Perl DBM实现的优缺点是什么?
(相关:与传统的DBM相比,像DBM :: Deep或KyotoCabinet这样的工具是否太慢/太重,当你需要的只是二进制/文本数据的透明哈希?)
我想在我的 Windows 机器上使用 dbm 模块,但它目前仅在 Unix 上受支持。http://docs.python.org/library/dbm.html
有谁知道具有类似语法的类似模块或在 Windows 上获得 dmb 功能的解决方法?能够访问写入硬盘驱动器的数据库,就像我编写代码以访问字典一样会很棒。感谢您的帮助!
我继承了一段带有代码片段的代码,该代码段清空数据库,如下所示:
dbmopen (%db,"file.db",0666);
foreach $key (keys %db) {
delete $db{$key};
}
dbmclose (%db);
Run Code Online (Sandbox Code Playgroud)
这通常是可以的,但有时数据库在调用此清理代码之前会变得非常大,并且通常在用户想要执行重要操作时.
有没有更好的方法呢?
我在anaconda环境中使用Python 3.6.我安装了GDBM
conda install gdbm
Run Code Online (Sandbox Code Playgroud)
安装顺利,但我不能使用dbm.gnuPython:
ModuleNotFoundError: No module named '_gdbm'
Run Code Online (Sandbox Code Playgroud)
_gdbm即使实际安装了GDBM,它也不会包含Python 模块.
这是一个已知的问题吗?我该如何解决?
谢谢!
我在 Windows 机器上安装了 python3.6。打开 my.db 文件时出现以下错误。
my.db 文件由我的程序在 python3.6 的 ubuntu16.04 中创建,使用搁置模块。
In [1]: import shelve
In [2]: db = shelve.open("etc/my.db")
---------------------------------------------------------------------------
error Traceback (most recent call last)
<ipython-input-2-b4828c8ee6e1> in <module>()
----> 1 db = shelve.open("etc/my.db")
c:\Python36\Lib\shelve.py in open(filename, flag, protocol, writeback)
241 """
242
--> 243 return DbfilenameShelf(filename, flag, protocol, writeback)
c:\Python36\Lib\shelve.py in __init__(self, filename, flag, protocol, writeback)
225 def __init__(self, filename, flag='c', protocol=None, writeback=False):
226 import dbm
--> 227 Shelf.__init__(self, dbm.open(filename, flag), protocol, writeback)
228
229
c:\Python36\Lib\dbm\__init__.py in …Run Code Online (Sandbox Code Playgroud) 我试图在Python中创建一个简单的密码存储程序,它看起来很简单,所以我想知道我是否使用搁置错误.
我有主.py文件:
import shelve
passwords = shelve.open('./passwords_dict.py')
choice = raw_input("Add password (a) or choose site (c)?")
if choice[0] == 'a':
site_key = raw_input("Add for which site? ").lower()
userpass = raw_input("Add any info such as username, email, or passwords: ")
passwords[site_key] = userpass
else:
site = raw_input("Which site? ").lower()
if site in passwords:
print "Info for " + site + ": " + passwords[site]
else:
print site, "doesn't seem to exist!"
print "Done!"
passwords.close()
Run Code Online (Sandbox Code Playgroud)
而另一个文件passwords_dict.py只是一个空字典.
但是当我尝试运行该程序时,我收到此错误:
Traceback (most recent call last): …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个简单的DBM库,如BerkeleyDB或Kyoto Cabinet,但本身就是为.NET工作.我需要管理超过一百万条记录(可能是一千万条),并且可能采用分层方式(最后一点不是强制性的,我们可以使用线性结构).
这样的事情甚至存在吗?
我一直在以这种方式搁置存储大量对象:
以字符串为键,列表为值的字典:
即
data["MITL"] = ["Radio And Television Broadcasting And Communications Equipment", "Communication Equipment"]
Run Code Online (Sandbox Code Playgroud)
或更简洁地:
...
SIXH.L Machine Tools & Accessories,
GOPAIST.BO Steel & Iron,
HERITGFOO.NS Food Wholesale,
MITL Radio And Television Broadcasting And Communications Equipment, Communication Equipment,
MMLP Oil Refining, Marketing, Oil & Gas Pipelines,
SESL.PA Diversified Electronics,
...
<? 30,000 entries>
Run Code Online (Sandbox Code Playgroud)
我从此.db文件中提取并导出到另一个.db文件,因此,行业是关键,列表由股票代号组成。
...
Industrial Electrical Equipment ['PLPC', 'MAG', 'LPTH', 'IIN', 'CUI', 'ULBI', 'APWC', 'CAPC', 'SVT', 'ARTX', 'CPST', 'OSIS', 'LGL', 'BW', 'HPJ', 'AOS', 'FLUX', 'AMSC', 'GTI', 'RTBC', 'AUSI', 'AETI', …Run Code Online (Sandbox Code Playgroud) dbm ×10
python ×4
shelve ×3
berkeley-db ×2
perl ×2
python-3.x ×2
.net ×1
anaconda ×1
b-tree ×1
database ×1
gdbm ×1
java ×1
kyotocabinet ×1
map ×1
module ×1
persistence ×1
python-2.7 ×1
python-3.6 ×1