Dynamodb设计建议

时间:2019-03-23 15:30:12

标签: amazon-web-services amazon-dynamodb

用例:X公司和Y公司发布产品信息。例如,对于X公司,其发布产品信息,例如X产品,Y产品,而Y公司则发布产品信息Z和K。

消费者喜欢公司X的产品X和公司K的产品Z。基于消费者的喜好,我们需要开始显示公司X和Y发布的产品。当客户导航到移动应用中的特定屏幕时,他们应该查看他们喜欢的所有产品。在我的用例中,消费者应该看到产品X和产品Z。

问题: 对于DynamoDB设计,是否建议将客户喜欢的产品保存在一个表中,而将x公司和Y公司发布的产品保存在另一个表中。然后以编程方式从两个表中检索记录,并仅过滤客户喜欢的记录并显示它们?

以上是否正确,或者您对上述用例还有其他数据库设计建议吗?

编辑:更新的用例

零售商X发布两种产品的广告信息。 例如:提供产品的X1:买二送一,此广告持续5天,从03/23/2019到03/28/2019

有优惠的产品X2:买二送一,此广告持续5天,从03/23/2019到04/01/2019

消费者A于03/15/2019早些时候订购或喜欢Retailer X Advanced的产品X1。从03/23开始生效,消费者A必须在03/28之前看到零售商X发布的广告信息(产品X1:买二送一)。

消费者B已于2019年3月25日订阅或喜欢零售商X的产品X2。有效期至03/25/209,消费者B必须看到零售商X发布的广告信息(带有出价的产品X1:买二送一),直到04/01。

1 个答案:

答案 0 :(得分:1)

以下是您可以采用的一种方法

import scrapy


class FoodSpider(scrapy.Spider):
    name = 'food'
    allowed_domains = ['https://blog.feedspot.com/food_blogs/']
    start_urls = ['https://blog.feedspot.com/food_blogs/']

    def parse(self, response):
        blogs = response.xpath("//div[@class='fsb v4']")
        for blog in blogs:
            names = blog.xpath('.//h3/a[@class="tlink"]/text()'[0:]).extract()
            links = blog.xpath('.//p/a[@class="ext"]/@href'[0:]).extract()
            locations = blog.xpath('.//p/span[@class="location"]/text()'[0:]).extract()
            abouts = blog.xpath('.//p[@class="trow trow-wrap"]/text()[4]'[0:]).extract()
            post_freqs = blog.xpath('.//p[@class="trow trow-wrap"]/text()[6]'[0:]).extract()
            networks = blog.xpath('.//p[@class="trow trow-wrap"]/text()[9]'[0:]).extract()

            for name in names:
                name.split(',')
                # print(name)
            for link in links:
                link.split(',')
            for location in locations:
                location.split(',')
            for about in abouts:
                about.split(',')
            for post_freq in post_freqs:
                post_freq.split(',')
            for network in networks:
                network.split(',')

            yield {'name': name,
                   'link': link,
                   'location': location,
                   'about': about,
                   'post_freq': post_freq,
                   'network': network
                    }

要查找X公司的所有产品,您可以做

| pk    |   sk                     |   GSI1
| user1 |   Likes#CompX#ProdA      |  CompX#ProdA |DateOfLiking:123 | ... some other ProductMetadata
| user1 |   Likes#CompY#ProdC      |  CompY#ProdC |DateOfLiking:123 | ... some other ProductMetadata
| compX |   Products#ProdA         |              | price:12        | ... some other metadata
| compX |   Products#ProdB         |              | price:14        | ... some other metadata
| compY |   Products#ProdC         |              | price:15        | ... some other metadata
| compY |   Products#ProdD         |              | price:19        | ... some other metadata

pk is sk of GSI1

要查找user1的所有喜欢内容,您可以

Select * where pk=compC and sk startswith Products

奖励用例(还有待进一步思考)

用于查找谁都喜欢产品

Select * where pk=user1 and sk startswith Likes