2013-12-22 3 views
1

Я хотел бы реализовать упорядоченную сущность datetime в appengine, в значительной степени похожую на собственные журналы Appengine. Поэтому мне, вероятно, понадобится какой-то уникальный алгоритм генерации упорядоченного id.Каков наилучший способ реализации структуры журналов, подобной структуре в AppEngine

У кого-нибудь есть предложения по этому поводу?

+2

У вас действительно есть временная метка для работы. Вы также можете использовать систему журналов, если данные сохраняются только некоторое время, а затем вы повторно обрабатываете их. –

+0

@husayt - вы должны объяснить, чего вы пытаетесь достичь. Тогда мы сможем предоставить решение. –

+0

@PeterKnego Приобретенные по умолчанию автоматически генерируемые идентификаторы являются случайными равномерно разбросанными числами. Как вы могли бы использовать упорядоченные идентификаторы для объектов в Appengine? – husayt

ответ

0

Используйте дату, которую вы добавляете. Один из способов - преобразовать его в unix time (ms с 1970 года), чтобы его числовое. Лучше, но больше кода не использовать хранилище данных и вместо этого использовать bigquery. Наверное, дешевле.

1

Имея аналогичную потребность, я передал длинную целую метку времени как идентификатор конструктора Entity. Идентификатором может быть только строка или длинное целое число в соответствии с Java Datastore Entities, Properties, and Keys. Чтобы увидеть фактические даты и время в Datastore Viewer, я ставлю одно и то же значение, преобразованное в java.util.Date, в неиндексированное свойство. По общему признанию, некоторая ненормализованная избыточность, но удобная на практике.

+0

Я думал об этом. Купите, как вы гарантируете уникальность? – husayt

+1

К сожалению, я проигнорировал уникальность. Длительное время int - миллисекунды в эпоху Unix. Дубликаты никогда не возникали здесь, но, возможно, могли. Я предлагаю представить время в микросекундах, наносекундах или пикосекундах. Источник времени в GAE не является точным, но если два события разделяют то же время, он может работать, чтобы отличить их от синтетических субмиллисекундных значений. Уникальные времена в момент регистрации были бы медленными (блокировка и т. Д.). Вместо этого фоновая задача могла сканировать и исправлять новые записанные метки времени, жертвуя кратковременной согласованностью в интересах лучшей временной доступности (теорема CAP от Brewer). –

0

Нам нужна дополнительная информация о том, что вы хотите сделать.

Если вы хотите сделать несколько журналов, вы можете использовать временную метку. с питоном и ОПРС это легко:

class Log(ndb.Model): 
    date = ndb.DateTimeProperty(auto_now_add=True) 
    message = ndb.StringProperty() 

Затем заказать журналы по полю даты. Если вы хотите сделать как AppEngine, вы можете связать свой журнал с родительским ключом и по дате и родительскому ключу.

AppEngine Python ndb

Я надеюсь, что это помогло вам.

Смежные вопросы