具有多个商店,分层类别的产品目录的数据库

时间:2018-11-27 10:20:10

标签: database performance database-design nosql rdbms

我正在寻求有关最佳数据库决策的帮助,无论是关系型数据库还是非关系型数据库,以及针对给定任务的最佳模式。

想法如下:存在一个具有多个商店(约10个)的离线商店网络。每个商店都有多个产品(〜100000),它们在它们之间共享,但是可用性和价格/折扣有所不同。产品分为层次结构类别(约1000个)。一些类别可以是折扣类别。有些不是。有些产品可能只限成人使用。产品具有各种属性。

所需查询:

  • 获取具有当前可用产品(按成人标记过滤)的给定商店的完整类别树(受嵌套级别限制)。
  • 通过给定商店的给定类别ID获取带有当前可用产品的一些子树。
  • 获取具有给定商店的仅折扣类别的树,其中包含当前可用和折扣的产品。
  • 获取按给定类别的给定商店(包括子类别)的给定商店当前可用产品的分页列表,并按成人进行过滤。
  • 获取具有完整属性列表的单个产品详细信息。
  • 按属性过滤产品。

当前解决方案基于以下模式在Oracle数据库之上构建:

表格:storesproductscategories(通过MPTT进行层次结构),products_categories(引用productscategories),{{ 1}}(引用productpricesstores),products(引用attributes),stores(引用productattributesattributes ),products(引用attributevalues)。

虽然可以,但是开始变慢了。例如,根据当前导入到数据库中的数据,获取具有可用产品类别的查询有时会执行不到一秒钟,有时甚至会超过30秒。

有问题的查询

productattributes

我们目前即将开始从Oracle数据库迁移。主要的应用程序数据库将是Postgres,但是对于应用程序的目录部分,我愿意研究一下其他存储。或者也许我应该只优化架构/查询?

目前有15家商店,每年增加约4家商店。 据我所知,产品不应超过20万种。在可预见的将来,它拥有25家商店,因此价格表限制了5000000行。

1 个答案:

答案 0 :(得分:0)

据我所知,对于Postgres,几百万行是可以的。我不会费心地迁移到某些NoSQL解决方案。相反,应专注于优化(适当的模型,索引等)并整理您提到的导入(防止长锁,大事务等)。您发送的查询应该易于索引(在Postgres上使用部分索引)。那就是我要做的。