在 VPS 上起了一个 MongoDB 服务,存一些爬虫抓来的数据
结果隔三差五就会丢失一部分 collection ,代码里没查出问题,加上每天都会重抓补齐数据,就一直没管
前两天想着还是解决一下,用 Celery 做了一个每分钟执行的任务,检查 collections 里缺少某一张表就发消息报警
结果三天过去了,数据都没再丢了
MongoDB 是第一个使用概率云形式存储数据的数据库吗,一直被观察就会坍缩,不观察就会逸散的
(其实是想问问丢数据的原因,和排查的方法)
1
Envov 2022-06-22 16:56:22 +08:00
薛定谔的数据库
|
2
ClericPy 2022-06-22 17:19:08 +08:00
果然不观察就会坍缩...
一般稍微正经一点的公司都不会让直连数据库吧, 直接查操作日志不行么 |
3
acehowxx 2022-06-22 17:38:41 +08:00 via Android
也可能是你的记忆出了问题。是不是看了啥不该看的东西被黑衣人删记忆了。
|
4
Buges 2022-06-22 17:46:01 +08:00 via Android
这个常见啊,你存入数据库的代码有什么 bug ,比如哪里吞了报错、存在 data race 、变量覆盖等原因,导致部分数据没有真的存入数据库。
这种 bug 也是很多程序员喜欢在离职前故意留的,难以发现,难以追责,当真正发现的时候不知道多久过去了,而且数据已经被完全污染了,几乎无法挽回。 |
5
mlxy123123 OP @Buges 不是该存进去的没有存住,而是原本存在的数据,不知何时突然消失了
|
6
InternetExplorer 2022-06-22 18:58:56 +08:00
有没有可能是你爬的数据,在你爬过之后又新增了一些,看上去像丢了
|
7
jin7 2022-06-22 19:10:22 +08:00 via Android
mongodb 真不建议使用。 用 es 不行吗
|
8
adekyou06 2022-06-23 00:34:09 +08:00 via Android
量子数据库,笑死
|
9
dream4ever 2022-06-23 08:59:42 +08:00
感觉很大可能是代码层面的问题,或者 MongoDB 没有用对,都商业化了还出这种问题,那 MongoDB 也太菜了。
|
10
Saxton 2022-06-23 10:06:54 +08:00
《量子数据库》
|
11
Saxton 2022-06-23 10:12:41 +08:00
@dream4ever MongoDB 性能这块 一直是个密, 这个数据库说到底还是不太成熟。
|
12
haoliang 2022-06-23 10:17:01 +08:00
以我对 mongodb 跟楼主代码的理解,我不相信是数据库的问题,也不相信这些上来就“xx 就是不行”的结论。
|
13
libook 2022-06-23 10:42:18 +08:00
我用过 7 年 MongoDB ,做公司的支付和订单系统的数据库,没出过什么幺蛾子,性能也不错;遇到过觉得不好用的要么是对这个数据库的特性不够了解,要么就是拿来当存关系模型。
查一下数据库日志呗,看看有没有 drop 记录,没有的话问问 VPS 运营商是不是回滚来着,滚到了 collection 产生之前的快照。 @jin7 #7 ES 是搜索引擎,跟 MongoDB 根本不是一类东西,各有擅长的场景,所以通常可以拿 ES 跟业务数据库组合使用,我们之前就是使用 MongoDB 的 Change Streams 特性来同步数据给 ES 用的,用于支持一些实时性要求低的复杂表单搜索场景。 |
14
karloku 2022-06-23 10:42:36 +08:00
丢失 collection 不至于.
就算古早的 mongodb 会丢数据, 但那也是 2.0 以前的默认配置下, 写入数据不需要 ack 时期的事情了. |
15
mlxy123123 OP 喷了,查到了原因,原来是被勒索了
```{ "_id" : ObjectId("62b32c12a4e36a7a7746a711"), "content" : "All your data is a backed up. You must pay 0.01 BTC to 12nx7Q6FAczH6yfhaEMJRmvRkavDTcwUJK 48 hours for recover it. After 48 hours expiration we will leaked and exposed all your data. In case of refusal to pay, we will contact the General Data Protection Regulation, GDPR and notify them that you store user data in an open form and is not safe. Under the rules of the law, you face a heavy fine or arrest and your base dump will be dropped from our server! You can buy bitcoin here, does not take much time to buy https://localbitcoins.com with this guide https://localbitcoins.com/guides/how-to-buy-bitcoins After paying write to me in the mail with your DB IP:\[email protected]\[email protected]" } ``` 勒去吧,玩具服务器而已 |
16
alexsunxl 2022-06-23 11:22:44 +08:00
哈哈哈哈哈。 这也太好笑了。
勒索的人估计也没想到,你会往 mongodb 丢数据去想,完全没发现。 不是发出来给 v 友喷了一下,估计 up 都发现不了真相 |
17
documentzhangx66 2022-06-23 11:55:35 +08:00
不会又是那种数据库端口开公网的大聪明吧?
|
18
mlxy123123 OP @documentzhangx66 确实是,没太在乎
刚看了一下甚至 auth 都没开 |
19
dk7952638 2022-06-23 13:18:30 +08:00
@libook 真心请教,Mongo 怎么保证事务呢?没有事务怎么保证订单和支付的可靠性呢?我一直认为 mongo 只能做一些对事务要求很低的业务
|
20
libook 2022-06-23 14:14:10 +08:00 1
@dk7952638 #19 https://www.mongodb.com/docs/manual/core/transactions/
早期版本确实不支持事务,但是可以自己用锁和二段提交等手段来模拟事务,后来官方直接就支持了。 而且现在凡是上规模的系统,架构也会变得很复杂,尤其是多服务、微服务、第三方合作的场景,很多时候数据库本身的事务也无法满足需求,必须引入分布式事务方案。 技术一直在变化的,比如我现在喷 Java 没有 Lambda 、Go 没有泛型、Apple Selicone 不支持 x86 程序,估计会被喷死。 另外 MongoDB 也支持 Decimal 数据类型,可以有效解决金额计算的浮点问题。 |