Memcached с большими объектами (графики NetworkX) - PullRequest
0 голосов
/ 17 октября 2018

У меня есть график NetworkX (g) с ~ 25k узлами и 125k ребрами.Я хочу кешировать g с использованием memcached, но g слишком велик.Максимум, на что я могу увеличить ограничение memcached для каждого элемента, - до 32 МБ, что не позволяет.

  1. Должен ли я даже попытаться заставить это работать с memcached?

  2. Каковы другие мои варианты, если я хочу иметь возможность хранить график networkx, который может иметь до 1 м узлов и 10 м ребер?

  3. Как я могуразделить график на части, чтобы он стал меньше, (а) ничего не зная о графике и (б) таким образом, что это приводит к снижению производительности до минимума, соединяя блоки обратно.

Яработа с питоном.Пример кода для создания графика прилагается.

import sys
import pickle
import random
import networkx as nx
from django.core.cache import cache

def randstring(x=3):
    return ''.join([chr(random.randrange(65, 91)) for _ in range(x)])

class Qux(object):
    def __init__(self, foo, bar):
        self.foo = foo
        self.bar = bar

for n, v in {1: 500, 2: 5000, 3: 50000}.items():
    g = nx.Graph()
    nodes = [Qux(randstring(), randstring()) for _ in range(v)]
    g.add_nodes_from(nodes)
    for node in g.nodes:
        num = random.randrange(25)
        edges = [(node, random.choice(nodes)) for _ in range(num)]
        g.add_edges_from(edges)

    print len(g.nodes), sys.getsizeof(pickle.dumps(g))
    cache.set('{}/graph'.format(n), g, 3600)

Вывод на консоль Memcached (memcached -I 32M -vv)

<20 new auto-negotiating client connection
20: Client using the ascii protocol
<20 set :1:1/graph 1 3600 130678 
>20 STORED
<20 delete :1:2/graph
>20 NOT_FOUND
<20 delete :1:3/graph
>20 NOT_FOUND
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...