我正在寻求有关最佳数据库决策的帮助,无论是关系型数据库还是非关系型数据库,以及针对给定任务的最佳模式。
想法如下:存在一个具有多个商店(约10个)的离线商店网络。每个商店都有多个产品(〜100000),它们在它们之间共享,但是可用性和价格/折扣有所不同。产品分为层次结构类别(约1000个)。一些类别可以是折扣类别。有些不是。有些产品可能只限成人使用。产品具有各种属性。
所需查询:
当前解决方案基于以下模式在Oracle数据库之上构建:
表格:stores
,products
,categories
(通过MPTT进行层次结构),products_categories
(引用products
和categories
),{{ 1}}(引用productprices
和stores
),products
(引用attributes
),stores
(引用productattributes
和attributes
),products
(引用attributevalues
)。
虽然可以,但是开始变慢了。例如,根据当前导入到数据库中的数据,获取具有可用产品类别的查询有时会执行不到一秒钟,有时甚至会超过30秒。
有问题的查询
productattributes
我们目前即将开始从Oracle数据库迁移。主要的应用程序数据库将是Postgres,但是对于应用程序的目录部分,我愿意研究一下其他存储。或者也许我应该只优化架构/查询?
目前有15家商店,每年增加约4家商店。 据我所知,产品不应超过20万种。在可预见的将来,它拥有25家商店,因此价格表限制了5000000行。
答案 0 :(得分:0)
据我所知,对于Postgres,几百万行是可以的。我不会费心地迁移到某些NoSQL解决方案。相反,应专注于优化(适当的模型,索引等)并整理您提到的导入(防止长锁,大事务等)。您发送的查询应该易于索引(在Postgres上使用部分索引)。那就是我要做的。