我的脚本以下列格式生成数据:
dictionary = {
(.. 42 values: None, 1 or 2 ..): {
0: 0.4356, # ints as keys, floats as values
1: 0.2355,
2: 0.4352,
...
6: 0.6794
},
...
}
其中:
(.. 42 values: None, 1 or 2 ..)
是游戏状态问题是状态空间非常大(数百万个州),因此整个数据结构无法存储在内存中。这就是我正在寻找适合我需求的数据库引擎的原因,我可以使用Python。我需要在给定状态下获取动作及其值的列表(之前提到的42个值的元组)并修改给定状态下给定动作的值。
答案 0 :(得分:1)
您可以使用键值缓存解决方案。一个好的是Redis。它非常快速和简单,写在C上,而不仅仅是一个键值缓存。与python集成只需几行代码。对于真正的big data,redis也可以很容易地缩放。我在游戏行业工作,理解我在说什么。
另外,正如这里已经提到的,你可以使用更复杂的解决方案,而不是缓存,数据库PostgresSQL。现在它支持JSON二进制格式字段 - JSONB。我认为最好的python数据库ORM是SQLAlchemy。它支持开箱即用的PostgresSQL。我将在我的代码块中使用这个。例如,你有一个表
class MobTable(db.Model):
tablename = 'mobs'
id = db.Column(db.Integer, primary_key=True)
stats = db.Column(JSONB, index=True, default={})
如果你的暴徒有这样的json统计数据
{
id: 1,
title: 'UglyOrk',
resists: {cold: 13}
}
您可以使用非零冷抗性
搜索所有怪物expr = MobTable.stats[("resists", "cold")]
q = (session.query(MobTable.id, expr.label("cold_protected"))
.filter(expr != None)
.all())
答案 1 :(得分:1)
查看ZODB:http://www.zodb.org/en/latest/
它是Python的natve对象DB,支持事务,缓存,可插入层,打包操作(用于保存历史记录)和BLOB。
答案 2 :(得分:1)
我建议您使用 HD5f 。它是一种与Python完美协作的数据库格式(专门为Python开发),并以二进制格式存储数据。这大大减少了要存储的数据的大小!更重要的是,它为您提供了随机访问的能力,我认为这是出于您的目的。此外,如果您不使用任何压缩方法,您将以尽可能高的速度检索数据。
答案 3 :(得分:0)
您也可以将其存储为JSONB in PostgreSQL DB。
要与PostgreSQL连接,您可以使用符合psycopg2的Python Database API Specification v2.0。