Я обскакиваю базу данных исследовательских работ и сталкиваюсь с проблемой, поскольку количество узлов становится слишком большим. Вот как работает моя структура данных:Более эффективные способы сохранения графа больших объектов и добавления к нему в python
class Network(object):
def __init__(self):
self.__authors = {} #each key is a name and each value is an object
self.__papers = {} #each key is a pubmed ID and each value is an object
class Author():
def __init__(self, name = '',paperIDs = []):
self.__name = name
self.__paperIDs = set(paperIDs)
self.coAuthors = {} #dict with author names as key and number of times authors worked together as value
class Paper():
def __init__(self, title = '', pageID = '', abstract = '', date = '', keywords = [], citedByIDs = [], authorNames = []):
self.__title = title
self.__pageID = pageID
self.__abstract = abstract
self.__date = date
self.__keywords = keywords
self.__citedByIDs = citedByIDs
self.__authorNames = authorNames
#these lists get arranged by importance based on networkx.pagerank
self.__citedBy = [] #IDs
self.__doesCite = [] #IDs
self.__authors = [] #Objects
В настоящее время я солить всю сеть, передавая сеть в качестве объекта:
def saveGraph(self,obj,filename):
with open(filename,'w') as outf:
pickle.dump(obj,outf)
Теперь проблема заключается в файл рассол становится очень большим. Из этого следует, что сохранение и загрузка занимает очень много времени, кроме того, когда он становится слишком большим, скажем, 20 гб, он не сможет загрузиться в память.
Моя первая и самая важная проблема - сканирование для получения дополнительных данных. Я ползаю, собирая бумаги, которые цитируют каждый лист, и собираю бумаги каждого автора. Этот метод требует, чтобы я проверял, существует ли в dict файл, и добавляет ли ссылка ссылку, иначе создайте новую бумагу. Я также хочу, чтобы несколько копировать, выполняя сканирование, но сохраняя файл рассола настолько большой, что он занимает слишком много времени.
Есть ли другой способ хранения данных; более эффективный способ рассортировать мои объекты; возможно, просто обновить мою базу данных для всех измененных файлов, а не создавать новый маринованный при каждом сохранении; и возможно ли только загрузить часть объектов в мою память?
Спасибо, neo4j кажется правильным инструментом. –