【MongoDB】记录API日志非常方便且最佳选择(如果结合IntelliJ甚至更加方便)
はじめに
気にはなっていたけど、なかなか触れる機会が無かった。。
そんな、同じクラスのあの子のような存在、それがmongoDBでした。
実際、使ってみると手軽でとても使いやすい。
こちらの記事では、簡単にインストールから導入までをまとめてみました。
使用MongoDB进行开发的内容
在有趣的个人开发中,我使用了MongoDB。[利用API的比特币自动交易系统]
-
- bitcoin値取得にCryptWatchAPIを使用
-
- bitcoin売買にBitflyerAPIを使用
-
- 開発言語:Node.js
-
- 開発環境:macOS Catalina
- デプロイ環境: AWS:EC2:ubuntu18.04LTS
我使用 MongoDB 来记录比特币交易时的价格以及用于交易决策的值的日志。
MongoDB是什么
就算有誤解的可能性,我毫不猶豫地說出來,可以這樣說,
这是一个可以将数据以JSON格式记录在数据库中的数据库。
不好意思!在这里,我们优先考虑了易懂性 m(_ _)m
(请高手们不要扔石头。)
除了这些之外,还有其他一些选项,比如易于扩展的可伸缩性和无需预先定义的无模式化。如果您想了解更详细的信息,请查看以下推荐页面。
详细推荐页面1
详细推荐页面2
最适合记录API!
MongoDB的特点
-
- スキーマレスで、
- JSON形式
这个非常适用于记录API。
也就是说,可以直接插入API响应的JSON!
而且,即使API的结构不断变化,也可以直接插入!
非常方便,因为是无模式的,所以不需要考虑太多,可以直接放进来。
这个是关系数据库管理系统(RDBMS)的话会怎么样?
-
- スキーマを細かく定義した上で、例外処理を施し構造が変わるものは省いてインサートする。
string,textとしてまるごとインサート
这两个都很困难。
我们假设了可能接收到的JSON内容,并且在定义模式时将其详细设置,然后进行处理,将响应的JSON逐个分解到列中,或者编写异常处理等等。
第二个是可以直接插入的,但是即使是TEXT格式的列也有字符限制。
在mysql中,最大长度为65,535(216-1)个字符。当使用数据时,需要再次转换为JSON格式。
唉,我感觉要吐了(;´Д`)
而且,我已经放弃了节点之间的结构。
「现在虽然不知道用在什么地方,但是以后想要用在有趣的事情上,所以暂时先保存数据吧♪」这种心情非常适合使用MongoDB。
私のbitcoin売買システムも、
将来、趣味で分析したり、機械学習で回せたらオモロイだろうなーってノリだけです。
使えそうな値と、APIをまるごと、とりあえずインサートおく。
APIの構造が多少変わっても気にしない。
我建议您首先亲自体验一下其便捷性。
然后,我将简单总结一下安装步骤。
安装
苹果操作系统
您可以使用brew轻松安装。
brew install mongodb
#自動起動に設定
brew services start mongodb
ubuntu18.04LTS
ubuntuはやや面倒です。
aptの管理ライブラリが最新のMongDBとなっていないため、
Mongoの公式から、パッケージを展開してインストールする必要があります。
#パッケージ管理システムに公開鍵を登録
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
#ダウンロード用のリストファイルを作成
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
#パッケージ管理システムのデータベースをリロード
sudo apt-get update
#最新の安定版をインストール
sudo apt-get install -y mongodb-org
#MongoDBを自動起動にする
sudo systemctl enable mongod
#MongoDBを起動
sudo service mongod start
树莓派
无法在树莓派上安装最新版本的MongoDB。
正确的是,Raspberry Pi的官方操作系统Raspbian OS无法安装MongoDB版本2.4.14以上。
由于RasbianOS只支持32位,因此上述的MongoDB版本仅支持64位。
実は、ラズパイ自体は64bitのため
OSに引きづられて最新のMongoDBが利用できなくなっています。
ですので、OSを入れ替えたら使用できるかもしれません。
詳しくはこちら
除非有特殊原因,否则不建议在树莓派上使用MongoDB,因为在Mongo 2.4及以下版本中,npm的Mongo库也不支持。
实施
数据库设置
在终端上创建一个Mongo数据库,并使其可供使用。
# MongoDBに入る
mongo
# データベース切り替え、作成
use db_name
#データベースの確認
show dbs
#使用しているデータベースを確認
db
#コレクションの作成
db.createCollection("collect_name")
#コレクションを確認
show collections
#コレクションにドキュメントをインサート
db.collect_name.insertOne({ name: "hoge", age: 88})
#コレクション内のドキュメントを確認
db.collect_name.find()
# MongoDBから抜ける
exit
稍微解释一下
-
- use db_name: データベースは無ければ、自動で作成されます。
-
- collection: mongoではtableでは無く、collectionと言います。
- document:mongoでは1つ1つのデータ(record)のことをdocumentと言います。
代码实现
我使用Node.js进行了实现。
以下是基本实现的例子。
const MongoClient = require('mongodb').MongoClient;
const options = {
useUnifiedTopology : true,
useNewUrlParser : true
};
const url = 'mongodb://localhost:27017';
const dbName = 'db_name';
//即時関数と、asyncを定義
(async function () {
let client;
try {
client = await MongoClient.connect(
url,
options,
);
//DB取得
const db = client.db(dbName);
//DBを操作
await insertDoc(db);
await findDoc(db);
} catch (err) {
//接続失敗
console.log(err);
}
//接続を切る
client.close();
})();
//Insert
function insertDoc(db) {
const collection = db.collection('collect_name');
collection.insertMany(
[{ name: 'hoge', age: 88 }, { name: 'fuga', age: 14 }],
(err, result) => {
console.log('Success inserted');
},
);
}
//Find
function findDoc(db) {
const collection = db.collection('collect_name');
collection.find({}).toArray((err, docs) => {
//検索内容をコンソール出力
console.log(docs);
});
}
数据确认
我尝试使用Mongo获取了比特币的交易数据。
标准的数据确认
#terminalからの標準のデータ確認
{
"_id" : ObjectId("5df9c2ba73160d276ad2e3ad"),
"flag" : "buy",
"label" : "買い注文",
"created_at" : ISODate("2019-12-18T06:10:02.072Z"),
"strTime" : "2019/12/18 15:10:02",
"price" : 737491,
"shortMA" : 737293.825779211,
"longMA" : 736227.9333333333,
"countHigh" : 4,
"records" : [ 735413, 735522, 735314, 735516, 735691, 735913, 736276, 736316, 736366, 736788, 736586, 736472, 735565, 735245, 735327, 735259, 735677, 735745, 736058, 736238, 736448, 736713, 736388, 736426, 736954, 737198, 736975, 737479, 737479, 737491 ]
}
我来解释一下
-
- _id: mongoから自動で振られるid
-
- created_at: ISODATE形式、datetime形式でinsertすることができます。
-
- shortMA: 過去5回分のpriceの移動平均金額を算出
-
- longMA: 過去30回分のpriceの移動平均金額を算出
- records: 過去のpriceリスト。リスト形式でそのままinsertしています。
即使数据的格式是列表,甚至嵌套了树形结构,也可以进行插入操作。
使用Intellij(jetBrains)
如果使用命令行界面的话,相比关系数据库管理系统(RDBMS),它的可读性较差且不易查看。我推荐使用IDE或者软件来浏览数据。我个人使用的是IntelliJ。只需要进行一次连接设置,以后只需双击就可以连接到数据库并进行数据浏览。相比在终端输入命令,这种方式更加方便快捷且易于阅读。
如果非要提出不满的话,我希望在表格视图中,列的顺序不会混乱。
(因为MongoDB本身没有读取DDL中的列顺序的概念,所以这是无法解决的。)
最后
MongoDB是一种方便易用的数据库。
虽然没有明确决定如何使用API数据,但是暂时引入MongoDB并在以后考虑是一个不错的选择♪
非常感谢您一直阅读到最后。