sql >> Database teknologi >  >> NoSQL >> Redis

Hurtigste måde at gemme et numpy array i redis

Jeg ved ikke, om det er hurtigst, men du kunne prøve noget som dette...

Lagring af et Numpy-array til Redis foregår sådan her - se funktionen toRedis() :

  • få form af Numpy-array og indkod
  • tilføj Numpy-arrayet som bytes til formen
  • gem det kodede array under den medfølgende nøgle

Hentning af et Numpy-array går sådan her - se funktion fromRedis() :

  • hent fra Redis den kodede streng, der svarer til den leverede nøgle
  • udtræk formen af ​​Numpy-arrayet fra strengen
  • udtræk data og genbefolk Numpy-arrayet, omform til den oprindelige form
#!/usr/bin/env python3

import struct
import redis
import numpy as np

def toRedis(r,a,n):
   """Store given Numpy array 'a' in Redis under key 'n'"""
   h, w = a.shape
   shape = struct.pack('>II',h,w)
   encoded = shape + a.tobytes()

   # Store encoded data in Redis
   r.set(n,encoded)
   return

def fromRedis(r,n):
   """Retrieve Numpy array from Redis key 'n'"""
   encoded = r.get(n)
   h, w = struct.unpack('>II',encoded[:8])
   # Add slicing here, or else the array would differ from the original
   a = np.frombuffer(encoded[8:]).reshape(h,w)
   return a

# Create 80x80 numpy array to store
a0 = np.arange(6400,dtype=np.uint16).reshape(80,80) 

# Redis connection
r = redis.Redis(host='localhost', port=6379, db=0)

# Store array a0 in Redis under name 'a0array'
toRedis(r,a0,'a0array')

# Retrieve from Redis
a1 = fromRedis(r,'a0array')

np.testing.assert_array_equal(a0,a1)

Du kan tilføje mere fleksibilitet ved at kode dtype af Numpy-arrayet sammen med formen. Det gjorde jeg ikke, fordi det kan være tilfældet, at du allerede ved, at alle dine arrays er af én bestemt type, og så ville koden bare være større og sværere at læse uden grund.

Groft benchmark på moderne iMac :

80x80 Numpy array of np.uint16   => 58 microseconds to write
200x200 Numpy array of np.uint16 => 88 microseconds to write

Søgeord :Python, Numpy, Redis, array, serialize, serialize, key, incr, unik



  1. Forårssession med MongoDB

  2. MongoDB:Hvordan opdaterer man flere dokumenter med en enkelt kommando?

  3. Sådan installeres Redis

  4. Sådan OG og IKKE i MongoDB $tekstsøgning