Я создал базу данных продуктов, которая разделена на 3 части. И каждая часть имеет «под» часть, содержащую метки. Но чем больше я работаю с ним, тем более неустойчивым он чувствует. И каждое добавление, которое я делаю, требует больше и больше кода, чтобы заставить его работать.Разработка масштабируемой базы данных продуктов в Google App Engine
Продукт изготовлен из деталей, и каждая деталь имеет тип. Каждый продукт, часть и тип имеет ярлык. И есть этикетка для каждого языка.
Продукт содержит детали в 2-х списках. Один список для частей по умолчанию (один из каждого типа) и одна из дополнительных частей.
Теперь я хочу добавить валюту в микс и пришла к решению перемоделировать весь способ, которым я справляюсь с этим.
В результате я хочу получить список всех объектов продукта, который содержит имя, описание, цену, все детали и все типы, соответствующие деталям. И для них правильные метки языка.
Как так:
product
- name
- description (by language)
- price (by currency)
- parts
- part (type name and part name by language)
- partPrice (by currency)
Проблема с моей текущей настройки, что это дикая смесь из db.ReferenceProperty и db.ListProperty (db.key)
И получать все данные, немного сложности, требующие нескольких циклов for-loops, соответствующих вызовам dict и datastore. Ну, это немного беспорядок.
Повторная модель (не проверенная) выглядеть следующим образом
class Products(db.model)
name = db.StringProperty()
imageUrl = db.StringProperty()
optionalParts = db.ListProperty(db.Key)
defaultParts = db.ListProperty(db.Key)
active = db.BooleanProperty(default=True)
@property
def itemId(self):
return self.key().id()
class ProductPartTypes(db.Model):
name= db.StringProperty()
@property
def itemId(self):
return self.key().id()
class ProductParts(db.Model):
name = db.StringProperty()
type = db.ReferenceProperty(ProductPartTypes)
imageUrl = db.StringProperty()
parts = db.ListProperty(db.Key)
@property
def itemId(self):
return self.key().id()
class Labels(db.Model)
key = db.StringProperty() #want to store a key here
language = db.StringProperty()
label = db.StringProperty()
class Price(db.Model)
key = db.StringProperty() #want to store a key here
language = db.StringProperty()
price = db.IntegerProperty()
Главное, здесь в том, что я разделить этикетки и Цены вне. Таким образом, они могут содержать этикетки и цены для любых продуктов, деталей или типов.
Итак, что мне интересно, это прочное решение с архитектурной точки зрения? Будет ли это выполнено, даже если в каждой модели тысячи записей?
Также приветствуются любые советы по извлечению данных. Мое текущее решение: сначала получить все данные и зациклиться на них, а также наклеить их на диктофоны, но похоже, что это может провалиться в любую минуту.
..fredrik
Спасибо. Причиной отдельной цены является то, что продукт содержит одну цену для каждого языка (валюты) и тот же для типов. Каждый тип имеет метку на основе текущего языка. Есть ли способ использовать кортеж с некоторой поддержкой языка? – fredrik
Я хочу получить все данные один раз (по крайней мере один для каждой таблицы), поэтому я не заканчиваю upp с помощью нового запроса, например, для получения метки для продукта при переходе по ним. – fredrik
Правильный подход IMO заключается в сохранении цены в десятичной форме, а затем вы должны использовать соответствующую утилиту фрейма для отображения в желаемом формате валюты. – Shekhar