gpt4 book ai didi

mongodb - 如何使用 Haskell 将某些内容从一个数据库移动到另一个数据库?

转载 作者:可可西里 更新时间:2023-11-01 09:26:01 26 4
gpt4 key购买 nike

关闭。这个问题需要更多focused .它目前不接受答案。












想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .

4年前关闭。




Improve this question




我对 Haskell 还很陌生;我已经阅读了无数关于它的教程和其他资源,但是每当我决定尝试编写程序来做任何远程有用的事情时,我通常甚至不知道从哪里开始。我最近在听一个播客,其中 Gabriel Gonzalez 谈到保持动力的最佳方法是将它实际用于项目并开始写作,所以我真的想用它来完成我手头的任务。

所以,我有一个 Mongo 数据库,它不断更新,定期抓取项目,还有一个 Elasticsearch 数据库。前者会经常更新我之前已经刮过的项目,而后者则填充了独特的项目。为了实现这一点,我有一个脚本(1000 行 Node.js),它不断运行并一一使用 Mongo 数据库中的项目,做一些检查以查看它是否已经在 Elasticsearch 数据库中,如果没有则添加它;之后,它从 Mongo 中删除。然而,这个脚本是一团糟。

我一直想在 Haskell 中做到这一点,因为 Haskell 非常适合根据我所读到和听到的以受控方式管理 IO,并且因为我喜欢保留用于转换数据和部分的纯函数的想法实际执行 IO 的程序是分开的。我还假设一个有效的 Haskell 解决方案会更简洁,并且在以后更改时更容易推理。

到目前为止,我已经按照教程设法使用 mongoDB 包在 Mongo 中执行 CRUD 操作,但是关于它的工作原理还有很多我不明白的地方。我发现在 Elasticsearch 中使用 Bloodhound 包做同样的事情更难,而且我完全不知道如何将事情拼凑在一起,尤其是在确保相关项目仅在成功添加后才从 Mongo 中删除时到 Elasticsearch 。

我知道这是一个非常广泛的问题,但如果有人对此有所了解,或者只是能够给我一些指导,我将不胜感激。事实上,非常感谢所有帮助。

最佳答案

I like the idea of keeping pure functions for transforming the data and the parts of the program actually performing IO separate.



如果您从 Haskell 开始,我建议您将其放在次要位置,并构建一个即使它有 IO 也能工作的解决方案。到处。当您获得信心时,您将学会了解重构代码的方法。

I'm completely stumped as to how I would piece things together, especially while ensuring that the relevant items only get deleted from Mongo after having been successfully added to Elasticsearch.



除非我遗漏了一些东西,否则这似乎是非常简单的程序逻辑!

如果你有以下(完全发明的,非常简化的)函数
getDocumentFromMongo :: MongoGonnection -> IO Document

deleteFromMongo :: MongoConnection -> Document -> IO ()

isPresentInElastic :: ElasticConnection -> Document -> IO Bool

insertInElastic :: ElasticConnection -> Document -> IO ()

你可以写一个无限循环,如:
loader :: MongoConnection -> ElasticConnection -> IO r -- runs forever
loader mongoConn elasticConn = forever (do
document <- getDocumentFromMongo mongoConn
existsInElastic <- isPresentInElastic elasticConn document
if existsInElastic
then return ()
else insertInElastic elasticConn document
deleteFromMongo mongoConn document)

当然,还有更多的事情需要考虑。如果遇到 exception 该怎么办在插入 Elasticsearch 时抛出?你大概需要使用像 try 这样的函数, bracket , finally onException 来自 Control.Exception .

此外,也许需要某种程度的并发性。有 many good libraries为此,也是。

关于mongodb - 如何使用 Haskell 将某些内容从一个数据库移动到另一个数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40445090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com