snowflake-cloud-data-platform - “雪花数据云”是云原生事务应用程序数据存储的好选择吗?
问题描述
目前,我在不同的数据存储上生成数据并复制到 Snowflake Staging,然后该数据通过 ELT 摄取移动到数据仓库数据库以用于分析目的。然而,这种方法本身可以被视为创建数据孤岛,因为我们已经拥有相同数据的 3 个副本:
- 事务性数据存储数据库
- 复制的雪花分期
- 雪花数据仓库数据库
从技术架构的角度来看,将Snowflake 用作事务应用程序的直接数据存储是否是个好主意?(执行许多 CRUD 操作的应用程序)。这可能有助于避免复制和摄取的成本。
我看到这种方法的主要问题是:Snowflake 不强制执行任何引用完整性(主键、外键),因此在 CRUD 应用程序中,我必须始终使用 MERGE 语句或以某种方式确保我不创建重复记录。
另一个问题是在云中,应用程序和雪花之间的距离(又名网络)决定了事务的性能,我希望我的 CRUD 操作具有良好、一致的性能。
非常感谢任何想法/建议。
解决方案
到目前为止,Snowflake 在单例更新和插入方面表现不佳,这是我们在事务数据库中看到的主要内容。当使用单例插入针对雪花提交时,我看到性能下降。
相反,它们针对非结构化数据和结构化数据的批量摄取进行了非常优化,并且专为 OLAP 仓库而设计。您仍然可以使用它,但您可能会看到同样的性能下降。此外,可以定义主键,但不强制执行。
在我看来,如果你面临这个挑战,你可以选择使用云中的 Postgre SQL DB(开源)作为你的事务数据库,它可以很好地补充 Snowflake 作为 OLAP 数据库。
推荐阅读
- python - 将模块导入python脚本时如何忽略.local/lib/python3.7/site-packages/
- javascript - react-select: (multiselect) 如何将事件对象和 selectedOptions 都传递给事件处理程序?
- azure - 如何在 Azure 存储帐户容器中获得有关“过期文件”的警报?
- javascript - `https://drive.google.com/uc?id=(photoID)` 是 CDN URL 吗?它有多可靠?
- c# - 拥有类型的延迟加载
- python - 如何在一行中的 if 语句中运行两行
- python - 安装特定版本的 setuptools 作为包的依赖项
- javascript - 按下按钮的次数,应乘以变量(recipeTotal)值
- spring - Flutter,通过 Dio/http 将嵌套的 FormData 发送到服务器
- java - Java输入读取字符串进行验证