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

Производительность GAE NDB для ComputedProperty по сравнению с поиском по запросу количества связанных моделей

Используя Google App Engine, мне просто любопытно, может ли кто-нибудь осветить характеристики производительности (чтение и запись) использования ComputedProperty по сравнению с расчетом по запросу связанной модели.

ComputedProperty имеет явное преимущество, позволяя индексировать свойство, но мне просто любопытно, насколько быстро чтение и запись по сравнению.

Например, для двух моделей:

class Car(ndb.Model):
  owner_key = ndb.KeyProperty(kind='Owner', indexed=True)

class Owner(ndb.Model)
   def cars_count(self):
       ndb.query(Car.owner_key == self.key).count()

   cars_count_prop = ndb.ComputedProperty(cars_count)

Вопрос действительно разбивается на что-то вроде следующего:

  1. насколько медленнее пишет Owner из-за наличия cars_count_prop?
  2. насколько быстрее читается cars_count_prop, чем cars_count?

Или, другими словами:

  1. какова асимптотическая вычислительная сложность (big-O) чтения и записи каждого?
  2. какова средняя вычислительная сложность случая - для людей, отличных от Джея Лено (т.е. небольшое количество Car экземпляров на Owner) ?
  3. Насколько ожидание чтения и записи связано с вычислительной сложностью, а сколько — поиском в базе данных/memcache?

Ответы:


1

Каждый раз, когда вы обновляете объект-владелец, запрос будет пересчитываться. Это не может быть хорошо. Сложность запроса не имеет значения. Но если вы действительно хотите знать, вы должны сравнить это.

03.02.2013
  • Спасибо, Гвидо. Рискну предположить, что вариант ComputedProperty будет предпочтительнее в тех случаях, когда он редко пишется, но часто читается. 03.02.2013
  • Даже в этих случаях вычисляемое свойство ничего не спасает — оно по-прежнему запускает запрос каждый раз, когда вы запрашиваете его значение! Смысл использования вычисляемого свойства в том, что вы хотите индексировать вычисленное значение. Но этот пример не является хорошим кандидатом для этого, так как сохраненное значение устаревает каждый раз, когда автомобиль добавляется к данному владельцу (или удаляется от него). Вы можете исправить это, добавив цикл чтения + записи к владельцу всякий раз, когда он приобретает или избавляется от автомобиля, но тогда вы также можете вручную сохранить счетчик... 05.02.2013
  • О да, я вижу. Это именно то, что говорится в в документах, поэтому я должен был отметить это. Спасибо за ваш комментарий. Довольно полезно. 05.02.2013
  • Новые материалы

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

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

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

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

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

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

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