密集写入时如何通过pymongo从mongodb集合中读取?

问题描述 投票:0回答:1

MongoDB 服务器版本:3.6.8(WSL Ubuntu 20.04)

pymongo 4.1.0

我正在学习机器学习。因为我觉得 TensorBoard 很难使用,所以我尝试通过 MongoDB 和 pymongo 实现一个简单的“可追踪、可见的训练系统”(“tvts”),它具有 TensorBoard 的部分功能。我选择 MongoDB,因为它是基于文档的、NoSQL,更适合记录模型训练的任意属性。

以下是我如何用它来记录训练条件:

import tvts

# before training the modle
ts = tvts.tvts(NAME, '172.26.41.157', init_params={
    'ver': VER,
    'batch_size': N_BATCH_SIZE,
    'lr': LR,
    'n_epoch': N_EPOCH,
}, save_dir=SAVE_DIR, save_freq=SAVE_FREQ)

# after an epoch is done
ts.save(epoch, {
    'cost': cost_avg,
    'acc': metrics_avg[0][0],
    'cost_val': cost_avg_val,
    'acc_val': metrics_avg_val[0][0],
}, save_path)

我将所有这些数据写入 MondoDB 的集合中,然后我可以获得如下统计数据和图表:

Name: mnist_multi_clf_by_numpynet_mlp_softmax_ok from 172.26.41.157:27017 tvts.train_log
+----------+-----------+-----------------+-----------------+-------------+-------------------+----------------------------+----------------------------+----------------+
| train_id | parent    | cost(min:last)  | LR(b-e:max-min) | epoch_count | existed save/save | from                       | to                         | duration       |
+----------+-----------+-----------------+-----------------+-------------+-------------------+----------------------------+----------------------------+----------------+
| 1        | None-None | 1.01055:1.01055 | 0.1:0.1         | 100         | 10/10             | 2022-04-14 11:56:17.618000 | 2022-04-14 11:56:21.273000 | 0:00:03.655000 |
+----------+-----------+-----------------+-----------------+-------------+-------------------+----------------------------+----------------------------+----------------+
| 2        | 1-100     | 0.56357:0.56357 | 0.1:0.1         | 100         | 10/10             | 2022-04-14 12:00:53.170000 | 2022-04-14 12:00:56.705000 | 0:00:03.535000 |
+----------+-----------+-----------------+-----------------+-------------+-------------------+----------------------------+----------------------------+----------------+
| 3        | 2-100     | 0.15667:0.15667 | 0.1:0.1         | 300         | 15/15             | 2022-04-14 12:01:35.233000 | 2022-04-14 12:01:45.795000 | 0:00:10.562000 |
+----------+-----------+-----------------+-----------------+-------------+-------------------+----------------------------+----------------------------+----------------+
| 4        | 3-300     | 0.06820:0.06839 | 0.1:0.1         | 300         | 15/15             | 2022-04-14 18:16:08.720000 | 2022-04-14 18:16:19.606000 | 0:00:10.886000 |
+----------+-----------+-----------------+-----------------+-------------+-------------------+----------------------------+----------------------------+----------------+
| 5        | 2-100     | 0.03418:0.03418 | 0.5:0.5         | 200         | 10/10             | 2022-04-14 18:18:27.665000 | 2022-04-14 18:18:34.644000 | 0:00:06.979000 |
+----------+-----------+-----------------+-----------------+-------------+-------------------+----------------------------+----------------------------+----------------+
| 6        | None-None | 1.68796:1.68858 | 0.001:0.001     | 3000        | 30/30             | 2022-04-16 09:15:56.085000 | 2022-04-16 09:18:01.608000 | 0:02:05.523000 |
+----------+-----------+-----------------+-----------------+-------------+-------------------+----------------------------+----------------------------+----------------+

enter image description here

我发现如果我同时密集地写入集合时尝试获取统计列表,就会卡住。 IE。我尝试即时获取训练的统计数据,每个训练周期都很短(大约 0.03 秒).

但是我发现当我密集地写入集合时,我仍然可以通过Stuido 3T(MongoDB的GUI)读出记录。

我用谷歌搜索了很多,但仍然无法解决。有人说写锁是独占的(如链接:mongodb写正在发生那么读必须等待还是不等待?),但是为什么Studio 3T可以做到

实际上我是 MongoDB 的新手,我可以使用它,因为我对 MySQL 的经验很少,并且在这个“tvts”中只有插入和查询,即它是 MongoDB 的非常简单的用法。 MySQL 中是否有一些“并发插入”的等效概念? (如链接:MySQL中的并发读写)我想MongoDB在写入的同时读取它并不是一件很难的任务。

虽然是TensorBoard部分功能的简单模拟,但我已经写了近600行代码。所以,很抱歉更改数据库不是首选

请帮助我。非常感谢!

mongodb pymongo
1个回答
0
投票

难以置信!我在发布这个问题后几分钟就意外地解决了它。看来MongoDB集合即使有密集插入也能读取,我猜这是它的正常性能。我想我无法通过谷歌搜索答案,因为这不是一个真正的问题。 我的问题可能是由我使用的 IDE Pycharm 引起的。如果我在 Pycharm 中运行脚本,就会遇到问题。 在系统shell窗口运行就OK了。

© www.soinside.com 2019 - 2024. All rights reserved.