Хранение ориентированного графа в Google appengine хранилище данных

Первоклассные функции

Это не действительно скрытая функция, но то, что функции являются объектами первого класса, является просто большим. Можно раздать их как любая другая переменная.

>>> def jim(phrase):
...   return 'Jim says, "%s".' % phrase
>>> def say_something(person, phrase):
...   print person(phrase)

>>> say_something(jim, 'hey guys')
'Jim says, "hey guys".'
9
задан Martin 27 July 2009 в 10:13
поделиться

3 ответа

Вот простейший способ:

class Vertex(db.Model):
  outedges = db.ListProperty(db.Key)
  # Other information about the vertex here

Теперь вы можете исследовать граф вообще без каких-либо запросов - просто вызовите db.get для одного или нескольких ключей, чтобы получить соответствующие вершины:

# Get the first referenced vertex
vertex2 = db.get(vertex1.outedges[0])

# Get all referenced vertices
vertices = db.get(vertex1.outedges)
7
ответ дан 4 December 2019 в 21:50
поделиться

В зависимости от количества вершин / ссылок вы можете просто использовать списки вместо создания группы новых сущностей. Проверьте проблемы графа друзей, описанные во второй половине этого видео с Google IO 2009: http://www.youtube.com/watch?v=AgaL6NGpkB8

Если вы считаете, что количество вершин достаточно велико, вы можно просто создать модель Vertex со списком, представляющим соединения.

2
ответ дан 4 December 2019 в 21:50
поделиться

Учитывая, что вы используете движок приложения Google, было бы лучше, если бы вы сохранили информацию в отдельных таблицах:

Одна для вершин, одна для ссылок из вершины (как вы уже сказано) и еще один, где пути уже вычислены заранее.

GAE работает лучше всего, если информация, которую вы храните, денормализована, поэтому вам не нужно выполнять с ней какие-либо вычисления.

0
ответ дан 4 December 2019 в 21:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: