NodeJS 在JSONB列或另一个表中保存产品图像和翻译

icomxhvb  于 2022-11-04  发布在  Node.js
关注(0)|答案(1)|浏览(146)

我正在开发一个多语言的电子商务商店,我正在使用Node.js和PostgreSQL。
我不知道应该将产品图像存储在单独的表中还是数据库中的JSONB列中?
翻译也是一样,每种语言的产品可能有不同的标题,那么哪种标题更好呢?是将它们也存储在单独的表中,还是存储在JSONB列中?

**编辑1:**在数据库中保存图像是指Amazon S3中图像的路径,而不是图像本身
**编辑2:**假设我有一个产品的徽标、缩略图和横幅,而且产品有多个用于轮播的图像,哪一个更好,将它们存储在JSONB列、多个varchar列或单独的表中?

iszxjhcz

iszxjhcz1#

我之所以将这个问题标记为duplicate,并不是因为它还包括一个关于如何存储国际化数据的问题。

我不知道应该将产品图像存储在单独的表中还是数据库中的JSONB列中?

我会避免将图片保存在数据库中,更好的方法是使用文件系统或像AmazonS 3这样的云存储;那么您可以在VARCHAR列中保存文件系统路径或云URL,以引用该映像文件。
如果你仍然想在PostgreSQL中保存图片,如果每个产品只有一张图片,我看不出有什么理由使用单独的表。你可以使用bytea或blob。查看here了解更多细节。

同样,对于翻译,每种语言的产品可能有不同的标题,那么哪种标题更好呢?是将它们也存储在单独的表中,还是存储在JSONB列中?

我认为有两种可能方法:
1.将每种支持的语言的标题存储在一个可为空的列中。如果计划在将来添加语言,则必须通过数据库迁移来处理。此外,如果有更多的文本数据(如产品说明),这些数据应支持所有语言,则不仅需要en_tilefr_titlees_title...列,还需要en_description、一米五纳一,一米六纳一......还有。
1.使用JSONB您可以将所有国际化数据存储在单个JSON列中,如果JSON结构发生变化,它将具有更大的灵活性。我将使用JSON而不是JSONB,因为它速度更快,需要的磁盘空间更少。如果你想索引JSON属性并对它们进行条件查询,应该使用JSONB。我不认为这是事实。Herehere你可以在postgres中阅读更多关于JSON与JSONB的内容
我会选择第二个方案。

编辑1

正如弗兰克·海肯斯在评论中所说,JSONB通常比postgres documentationJSON更好。
基准测试可以帮助您更好地了解JSON或JSONB是最适合您的选择。
我找到了一个here的性能指标评测。这里的结果显示JSONB的性能优于JSON。老实说,这对我来说很奇怪,如果有时间的话,我会做一些更深入的测试。
无论如何,对于您的情况,JSONB应该和JSON一样好。

相关问题