Nano Hash - криптовалюты, майнинг, программирование

Каков наиболее эффективный способ сделать отношение ONE: ONE в хранилище данных Google App Engine?

Даже со всем, что я знаю о хранилище данных AppEngine, я не знаю ответа на этот вопрос. Я пытаюсь избежать необходимости писать и запускать весь код, который потребуется, чтобы понять это, надеясь, что кто-то уже знает ответ.

У меня есть код вроде:

class AddlInfo(db.Model)
     user = db.ReferenceProperty(User)
     otherstuff = db.ListProperty(db.Key, indexed=False)

И создайте запись с помощью:

info = AddlInfo(user=user)
info.put()

Чтобы получить этот объект, я могу сделать что-то вроде:

# This seems excessively wordy (even though that doesn't directly translate into slower)
info = AddlInfo.all().filter('user =', user).fetch(1)

или я мог бы сделать что-то вроде:

class AddlInfo(db.Model)
     # str(user.key()) is the key to this record
     otherstuff = db.ListProperty(db.Key, indexed=False)

Творение выглядит так:

info = AddlInfo(key_name=str(user.key()))
info.put()

А затем получить информацию с помощью:

info = AddlInfo.get(str(user.key()))

Мне не нужно свойство reference_property в AddlInfo (в первую очередь я попал туда, используя объект пользователя). Что быстрее/менее ресурсоемко?

==================

Часть того, почему я делал это таким образом, заключается в том, что другие вещи могут быть списком из более чем 100 ключей, и они мне нужны только иногда (вероятно, менее чем в 50% случаев). Я пытался сделать его более эффективным, не загружая эти 100+ ключей по каждому запросу.....


  • Самый эффективный способ - просто денормализировать и не иметь 2 отдельных объектов. 16.08.2011
  • есть трюк, чтобы избежать накладных расходов, о которых вы упоминаете в конце, - поместите более 100 ключей в дочерний класс. затем вы можете выбрать для этого, получить ключ (только), найти родителя и получить меньший объем данных. это описано в другом ответе здесь, где-то.... 16.08.2011

Ответы:


1

Между этими двумя вариантами второй немного дешевле, потому что вы определяете ключ путем вывода, а не ищете его в удаленном индексе.

Как сказал Вубл, еще дешевле хранить все на одном объекте. Рассмотрите вариант Expando, если вам просто нужен способ хранения множества необязательных специальных свойств.

15.08.2011
  • Более чем незначительно дешевле - примерно вдвое меньше стоимости/времени. 16.08.2011

  • 2

    Второй подход лучше, с одним изменением: нет необходимости использовать весь ключ пользователя в качестве имени ключа этой сущности — просто используйте то же имя ключа, что и запись пользователя.

    16.08.2011
  • Оказывается, вы не можете использовать весь ключ. Это не позволит вам. 20.08.2011
  • @Mark0978 Почему бы и нет? Единственная причина, по которой я могу думать, что это может быть проблемой, заключается в том, что ключ, который вы пытаетесь использовать, слишком длинный. 21.08.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..