带有嵌套字典(Python)的JSON内存中数据库

时间:2019-04-10 08:26:28

标签: python json redis nosql

我正在尝试在内存中维护一个非常易失的数据库(磁盘速度太慢),并在侦听数百个JSON Websocket流时始终进行更新。

当前我正在使用redis,但它不支持字典,仅支持数组。您可以将JSON字符串转储到redis数据库,但是redis不会知道它是JSON。因此,您无法访问或更改某个键的值。您必须加载整个JSON字符串,对其进行编辑,然后将其转储回Redis。这当然很慢,我想停止这样做。

有一个名为reJSON的库,该库允许redis识别JSON并编辑JSON字典,但是我必须重写很多代码才能使用它。但是,如果使用reJSON,则可以直接访问和编辑特定键的值,而不必加载和转储整个JSON字符串。

当前我正在做的是串联键名,因为它们包含字典。这里的问题是字典中是否有字典。我必须串联第二次,这会产生-ton-键。我认为这不是最佳方法。

还建议我使用Redis命令和哈希表,而不是仅存储JSON字符串,但哈希表似乎不支持字典,而仅支持数组。

关于数据本身,我正在侦听websocket流,其中每次更新都会为我提供如下数据: https://api.binance.com/api/v1/klines?symbol=XRPBTC&interval=5m&limit=1

这是交易市场“ XRPBTC”的“蜡烛”,蜡烛每“ 5分钟”完成。我想每次API数据的第一个元素更改时都继续创建一个新密钥(这意味着5分钟过去了,现在有一个新的蜡烛。该值是一个毫秒的纪元)。如果未更改,则当前蜡烛不是新的,但数组的其他元素已更改,并且这些更改需要在redis数据库中进行。

比方说,我得到了一个websocket更新,其中当前蜡烛数组的第4个元素发生了变化。这很可能发生,因为它是“收盘价”或当前市场价格。

我现在拥有的是一个名为candles_XRPBTC5MINUTE的钥匙。此键的值是字典的字典。 https://pastebin.com/rAYs0TaN

redis中的“关闭”值如下: candles_XRPBTC5MINUTE["1554792300000"]["close"]

我想将redis中的值编辑为新websocket更新中的值。 candles_XRPBTC5MINUTE包含嵌套字典,大小为0.1 MB。目前,我将candles_XRPBTC5MINUTE从redis加载为JSON,将candles_XRPBTC5MINUTE["1554792300000"]["close"]更新为websocket更新中的内容,然后将其作为JSON转储回redis。如您所知,当我关注最新的密钥1554792300000时,这会处理很多不必要的旧数据。

我的选择似乎是:

A。使用reJSON

B。继续使用香草Redis,但再次串联键名称,为candles_XRPBTC5MINUTE_1554792300000candles_XRPBTC5MINUTE_1554792600000创建数以万计的键(candles_XRPBTC5MINUTE_15547929000001MINUTE3MINUTE15MINUTE,用于其他数百个市场)

C。尝试将我从WebSocket检索到的数据存储为Redis哈希而不是JSON字符串

这里最好的选择是什么,为什么?还有其他选择吗?

0 个答案:

没有答案