Моделирование амазонского метасторка с использованием продуктов от многих продавцов в mongodb - PullRequest
0 голосов
/ 29 февраля 2012

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

Вот так выглядит мой документ о товаре.

{
    "_id" : ObjectId("4f4c8ad406164f46f1000085"),
    "created_at" : ISODate("2012-02-28T08:05:40Z"),
    "manufacturer_id" : ObjectId("4f4c88bd06164f46f1000068"),
    "manufacturer_name" : "Minka Lavery",
    "manufacturer_sku" : null,
    "merchant_products" : [
        {
            "_id" : ObjectId("4f4c8ad406164f46f1000086"),
            "_type" : "CommissionJunctionProduct",
            "merchant_name" : "1800lighting.com",
            "merchant_id" : ObjectId("4f4c8ad406165f46f1000086"),
            "sku" : "8875981",
            "buy_url" : "http://www.foobar.com",
            "price" : 10.80,
            "in_stock" : true,
            "updated_at" : ISODate("2012-02-28T08:05:40Z"),
            "created_at" : ISODate("2012-02-28T08:05:40Z")
        }
    ],
    "name" : "Minka Lavery 8717-44 Bridgeport 1 Light Outdoor",
    "updated_at" : ISODate("2012-02-28T08:05:40Z")
}

В нем много торговых продуктов. Каждый источник данных продуктов имеет свой собственный _type.

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

Когда я в конечном итоге показываю продукты пользователю, я перебираю все торговые продукты и выясняю, какой из них лучше всего показать пользователю. Я думал о фоновом скрипте, который просто перемещает лучший merchant_product в первое место массива.

Единственное, что я заметил в этой настройке, это создание merchant_products, и их обновление кажется довольно сложным. Это случается не часто, но логика сложна, чтобы убедиться, что я не создаю дубликаты продуктов и могу обновлять цены. Также я не могу показать все товары продавца, которые есть у продавца.

Я мог бы подробнее рассказать о том, что я сделал, но, думаю, я мог бы узнать больше, увидев, как другие люди макетируют что-то подобное.

1 Ответ

0 голосов
/ 29 февраля 2012

Взгляните на Schema.org.Определенные там модели ориентированы на документы, и я считаю, что связать их с MongoDB очень легко.Вот как моделируется Продукт.

http://www.schema.org/Product

Что вы заметите, так это то, что Продукт имеет Предложения, которые могут быть от разных Продавцов.Вы можете хранить предложения в другой коллекции, а затем управлять ими отдельно.Это также поможет вам сортировать предложения по различным критериям, таким как (местоположение, цена или рейтинг продавца), непосредственно через запросы.

Вам не нужно хранить Dbref of Offer в коллекции Product.Просто сохраните идентификатор продукта в каждом документе предложения.

...