我正在开发一个多语言的电子商务商店,我正在使用Node.js和PostgreSQL。
我不知道应该将产品图像存储在单独的表中还是数据库中的JSONB列中?
翻译也是一样,每种语言的产品可能有不同的标题,那么哪种标题更好呢?是将它们也存储在单独的表中,还是存储在JSONB列中?
**编辑1:**在数据库中保存图像是指Amazon S3中图像的路径,而不是图像本身
**编辑2:**假设我有一个产品的徽标、缩略图和横幅,而且产品有多个用于轮播的图像,哪一个更好,将它们存储在JSONB列、多个varchar列或单独的表中?
1条答案
按热度按时间iszxjhcz1#
我之所以将这个问题标记为duplicate,并不是因为它还包括一个关于如何存储国际化数据的问题。
我不知道应该将产品图像存储在单独的表中还是数据库中的JSONB列中?
我会避免将图片保存在数据库中,更好的方法是使用文件系统或像AmazonS 3这样的云存储;那么您可以在
VARCHAR
列中保存文件系统路径或云URL,以引用该映像文件。如果你仍然想在PostgreSQL中保存图片,如果每个产品只有一张图片,我看不出有什么理由使用单独的表。你可以使用bytea或blob。查看here了解更多细节。
同样,对于翻译,每种语言的产品可能有不同的标题,那么哪种标题更好呢?是将它们也存储在单独的表中,还是存储在JSONB列中?
我认为有两种可能方法:
1.将每种支持的语言的标题存储在一个可为空的列中。如果计划在将来添加语言,则必须通过数据库迁移来处理。此外,如果有更多的文本数据(如产品说明),这些数据应支持所有语言,则不仅需要
en_tile
、fr_title
、es_title
...列,还需要en_description
、一米五纳一,一米六纳一......还有。1.使用
JSONB
您可以将所有国际化数据存储在单个JSON列中,如果JSON
结构发生变化,它将具有更大的灵活性。我将使用JSON
而不是JSONB
,因为它速度更快,需要的磁盘空间更少。如果你想索引JSON属性并对它们进行条件查询,应该使用JSONB
。我不认为这是事实。Here和here你可以在postgres中阅读更多关于JSON与JSONB的内容我会选择第二个方案。
编辑1
正如弗兰克·海肯斯在评论中所说,
JSONB
通常比postgres documentation的JSON
更好。基准测试可以帮助您更好地了解JSON或JSONB是最适合您的选择。
我找到了一个here的性能指标评测。这里的结果显示
JSONB
的性能优于JSON
。老实说,这对我来说很奇怪,如果有时间的话,我会做一些更深入的测试。无论如何,对于您的情况,
JSONB
应该和JSON一样好。