MongoDB初接触
9198 ワード
自分でアリ雲とhexoを借りてサイトを作ったが、廃棄され、過去に書いたブログはしばらくここに移った.
title:MongoDB初接触date:2017-01-22 16:21:56 tags:-テクノロジー-TODO-NoSQL
仕事の要求に応じて、MongoDBを勉強して、それから結果に対して訓練の検収を行う必要があります.本文は同僚が興味を持つ点だけを対象にしている.
翻訳の不備を恐れて、一部の原文を抜粋する.
私個人の簡単で乱暴な理解は、構造の制限がなく、事前に構造を定義する必要がなく、いつでも1つの集合(mongodyの集合collection、RDBMSのtable)に異なる構造のデータをアクセスすることができます.例ではMySQLではschemaを変更するのに数日か数週間かかり、mongodbでは数時間しかかかりません.
データ量が増加するにつれて、MongoDBはアプリケーションの拡張を変更する必要がなく、ダウンタイムが全くなくなります.
どのように実現するかはさらに学ぶ必要がある.
詳細はこちら
https://docs.mongodb.com/manual/replication/
Replica sets provide redundancy and high availability, and are the basis for all production deployments. この特性は冗長性と高可用性を実現した.
分散計算の利点信頼性(フォールトトレランス):分散計算システムにおける重要な利点の一つは信頼性である.1台のサーバのシステムクラッシュは、残りのサーバには影響しません. 拡張性:分散コンピューティングシステムでは、必要に応じてより多くのマシンを追加できます. リソース共有:共有データは、銀行、サブスクリプションシステムなどのアプリケーションに不可欠です. 柔軟性:このシステムは非常に柔軟であるため、新しいサービスのインストール、実装、デバッグが容易です. より高速:分散コンピューティングシステムは、他のシステムよりも高速な処理速度をもたらすように、複数のコンピュータの計算能力を有することができる. オープン・システム:オープン・システムであるため、ローカルまたはリモートでサービスにアクセスできます. より高いパフォーマンス:集中型コンピュータネットワーククラスタに比べて、より高いパフォーマンス(およびより良い価格比)を提供できます.
分散計算の欠点トラブルシューティング:トラブルシューティングとトラブルシューティングの問題. ソフトウェア:より少ないソフトウェアサポートは、分散コンピューティングシステムの主な欠点です. ネットワーク:伝送問題、高負荷、情報損失など、ネットワークインフラストラクチャの問題. セキュリティ:システムの特性を開発し、分散コンピューティングシステムにデータのセキュリティと共有のリスクなどの問題がある.
パーティションの詳細:https://docs.mongodb.com/manual/sharding/
私が理解している理由の1つは、ドキュメントの格納方法です.例えば、あるユーザーに関連するものは、1つの集合(SQLのテーブル)に格納されるので、SQLのマルチテーブル連合クエリーに対して、速くします.しかし、冗長性の問題があります.たとえば、製品コメントは、製品セットに1回保存され、ユーザーセットにも1回保存されます.
他にも理由があるに違いない.もっと勉強しなければならない.
参照ドキュメント:
http://www.cnblogs.com/crazylights/archive/2013/05/08/3066056.html
MongoDBではトランザクションはサポートされていませんが、mongodbではドキュメントの保存、変更、削除など、多くの原子操作が提供されています.
ドキュメントストレージ方式の可能性のある劣勢.
http://www.runoob.com/mongodb/nosql.html
The most common use cases for MongoDB include Single View, Internet of Things, Mobile, Real-Time Analytics, Personalization, Catalog, and [Content Management](Content Management).
Applications that require complex,multi-row transactions(e.g.,a double-entry bookkeeping system)例えばbooking system.このような強い事務性が必要で、複雑な事務が必要です.
例えば電子商取引システムの製品の詳細、分類、属性など、checkout system(私が理解しているのは購入と支払いなどの行為)はMySQLを使います
詳細については、以下を参照してください.https://www.mongodb.com/compare/mongodb-mysql
取付 MongoDBサービス を実行する MongoDBバックグラウンド管理shell
shellでデータベースを操作する方法で、コードでデータベースを操作すればshellを開く必要はありません.
いくつかの共通命令 MongoDB Webユーザーインタフェース
ただし、2実行のサービスを閉じる必要があります.同じインスタンスmongod instanceかもしれません.
以上のコマンドが直接実行できない場合は、mongodbインストールディレクトリのbinディレクトリの下に入る必要があります.インストール方法によってはbrewでインストールした場合binディレクトリに入る必要はありません
取付
コード 取付 コード接続データベース 増加 what's more
https://scotch.io/tutorials/using-mongoosejs-in-node-js-and-mongodb-applications
With Mongoose, everything is derived from a Schema.
mongodyは動的schemaであり,schemaはほとんどなく,どの構造のデータも一つの集合(collection,RDBMSに相当するtable)に格納できる.しかしmongoseは確かにschemaを先に設定しますが、その後はmongoseの方法でいつでもschemaを変更することができます.
エラー:
bugid: https://github.com/Automattic/mongoose/issues/4291
一時的なソリューション:collectデータベースの前に
まず、なぜMongoDBからMySQLに移行するのですか?個人的に考えてみると、3つの状況があります.は、タイミングサービスを通じて、MongoDBのデータの一部を分析し、MySQLに格納する.これでは、技術的な問題を解決する必要はなく、APIを書くだけで、APIはデータを取ってMongoDBの駆動でMongoDBデータベースに接続し、メモリデータはMySQLの駆動でMySQlに接続します. MySQLにデータを直接移行する場合は、データベース間の移行のみです.しかし、必要ですか?なぜMySQL に直接保存しないのですか?リアルタイムでデータを分析するためにMySQLに移行する必要がある場合は、MongoDBもサポートします.
https://www.mongodb.com/collateral/apache-spark-and-mongodb-turning-analytics-into-real-time-action
だからよく考えなければなりません.結論は以下の通りです.はMongoDBのみで実現:MongoDBはすべての問題を解決できるようです. 部分MongoDB部分MySQL、移行の問題に関与しません:ビジネスによって異なるsqlを使用します. MySQLを移行します.
インストールには彼らの要求に従う必要があるほか、何の違いもないように見えます.環境がないのでテストできません.アリ雲ECSが必要
アーキテクチャhttps://www.mongodb.com/collateral/mongodb-architecture-guide MongoDBリアルタイム分析https://www.mongodb.com/collateral/apache-spark-and-mongodb-turning-analytics-into-real-time-action MongoDB結合BIhttps://docs.mongodb.com/bi-connector/master/
title:MongoDB初接触date:2017-01-22 16:21:56 tags:-テクノロジー-TODO-NoSQL
仕事の要求に応じて、MongoDBを勉強して、それから結果に対して訓練の検収を行う必要があります.本文は同僚が興味を持つ点だけを対象にしている.
MongoDBの優劣
dynamicschemasダイナミックモード
翻訳の不備を恐れて、一部の原文を抜粋する.
meaning that you can create records without first defining the structure, such as the fields or the types of their values. You can change the structure of records (which we call documents) simply by adding new fields or deleting existing ones. This data model give you the ability to represent hierarchical relationships, to store arrays, and other more complex structures easily.
flexible data model : your database schema can evolve with business requirements
For example, schema changes that took days of weeks in The Weather Channel's MySQL databases could be made in just hours with MongoDB.
私個人の簡単で乱暴な理解は、構造の制限がなく、事前に構造を定義する必要がなく、いつでも1つの集合(mongodyの集合collection、RDBMSのtable)に異なる構造のデータをアクセスすることができます.例ではMySQLではschemaを変更するのに数日か数週間かかり、mongodbでは数時間しかかかりません.
high availability and scalability高可用性(or有効性)、高拡張
MongoDB can also be scaled within and across multiple distributed data centers
As your deployments grow in terms of data volume and throughput, MongoDB scales easily with no downtime, and without changing your application.
データ量が増加するにつれて、MongoDBはアプリケーションの拡張を変更する必要がなく、ダウンタイムが全くなくなります.
Scalability is not just about speed. It's about 3 different metrics, which often work together:
* Cluster Scale. Distributing the database across 100+ nodes, often in multiple data centers
* Performance Scale. Sustaining 100,000+ database read and writes per second while maintaining strict latency SLAs
* Data Scale. Storing 1 billion+ documents in the database
どのように実現するかはさらに学ぶ必要がある.
out-of-the-box replicationで使用可能なレプリケーション機能
詳細はこちら
https://docs.mongodb.com/manual/replication/
Replica sets provide redundancy and high availability, and are the basis for all production deployments. この特性は冗長性と高可用性を実現した.
Autosharding(自動パーティション化)または分散システム
分散計算の利点
分散計算の欠点
パーティションの詳細:https://docs.mongodb.com/manual/sharding/
クエリ速度が速い
私が理解している理由の1つは、ドキュメントの格納方法です.例えば、あるユーザーに関連するものは、1つの集合(SQLのテーブル)に格納されるので、SQLのマルチテーブル連合クエリーに対して、速くします.しかし、冗長性の問題があります.たとえば、製品コメントは、製品セットに1回保存され、ユーザーセットにも1回保存されます.
他にも理由があるに違いない.もっと勉強しなければならない.
参照ドキュメント:
http://www.cnblogs.com/crazylights/archive/2013/05/08/3066056.html
劣勢:複雑なトランザクションはサポートされていません
MongoDBではトランザクションはサポートされていませんが、mongodbではドキュメントの保存、変更、削除など、多くの原子操作が提供されています.
劣勢(uncertain):MongoDBはパフォーマンスが速いため、データが冗長になる
ドキュメントストレージ方式の可能性のある劣勢.
what's more
http://www.runoob.com/mongodb/nosql.html
MongoDB適用シーン、MySQLと比較
MongoDB適用
The most common use cases for MongoDB include Single View, Internet of Things, Mobile, Real-Time Analytics, Personalization, Catalog, and [Content Management](Content Management).
MySQL適用
Applications that require complex,multi-row transactions(e.g.,a double-entry bookkeeping system)例えばbooking system.このような強い事務性が必要で、複雑な事務が必要です.
MongoDBとmySQLを併用した場合
例えば電子商取引システムの製品の詳細、分類、属性など、checkout system(私が理解しているのは購入と支払いなどの行為)はMySQLを使います
詳細については、以下を参照してください.https://www.mongodb.com/compare/mongodb-mysql
MongoDBとnodejsを組み合わせた実装
MongoDBサーバのインストール実行
mongod
mongo
を開くshellでデータベースを操作する方法で、コードでデータベースを操作すればshellを開く必要はありません.
いくつかの共通命令
// db
show dbs
// db
db
// db
use test
// db collection
show collections
// collection
db.collection_name.find().pretty()
// collection
db[collection_name].find()
db.getCollection(collection_name).find()
//pretty()
// collection , collection
db.collection_name.drop()
//
db.collection.insert()
//Shell help
help
// help
mongo —help
//db help
db.help()
//collection help
db.collection.help()
mongod --dbpath=/data/db --rest
デフォルトポート28017を起動できます.http://localhost:28017/ただし、2実行のサービスを閉じる必要があります.同じインスタンスmongod instanceかもしれません.
以上のコマンドが直接実行できない場合は、mongodbインストールディレクトリのbinディレクトリの下に入る必要があります.インストール方法によってはbrewでインストールした場合binディレクトリに入る必要はありません
mongo-native(公式駆動)を用いてnodejsの増加を実現する(削除類似は試みていない)
npm install mongodb
https://docs.mongodb.com/getting-started/node/client/https://github.com/mongodb/node-mongodb-native?jmp=docs var model = {
uid: json.u,
……
}
var insertDocuments = function (db, callback) {
// Get the documents collection
var collection = db.collection('ma_pv');
// Insert some documents
collection.insert(model, function (err, result) {
assert.equal(err, null);
console.log("Inserted documents into the collection");
callback(result);
});
}
var MongoClient = require('mongodb').MongoClient, assert = require('assert');
// Connection URL
var url = 'mongodb://localhost:27017/ma';
// Use connect method to connect to the server
MongoClient.connect(url, function (err, db) {
assert.equal(null, err);
console.log("Connected successfully to server");
insertDocuments(db, function () {
db.close();
});
});
mongose(ORM)によるnodejs増加
npm install mongoose
var mongoose = require('mongoose');
mongoose.Promise = global.Promise
mongoose.connect('mongodb://localhost:27017/ma');//;
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
console.log("we're connected!");
});
module.exports = db;
定義model var mongoose = require('mongoose');
var db = require('./db');
var maPV_schema = mongoose.Schema({
uid: String,
……
create_time: Date
}); // , maPV_schema
var maPV = mongoose.model('maPV', maPV_schema); // maPV_schema
module.exports = maPV;
データvar PVmodel = require("../model_mongoose/ma_pv");
var pvData = new PVmodel({
uid: json.u,
……
});
pvData.save(function (err,pv,num) {
if (err) {
console.error(err)
}
// throw err;
console.log('pvData saved successfully!');
});
https://scotch.io/tutorials/using-mongoosejs-in-node-js-and-mongodb-applications
ぶんせき
With Mongoose, everything is derived from a Schema.
mongodyは動的schemaであり,schemaはほとんどなく,どの構造のデータも一つの集合(collection,RDBMSに相当するtable)に格納できる.しかしmongoseは確かにschemaを先に設定しますが、その後はmongoseの方法でいつでもschemaを変更することができます.
問題
エラー:
(node:21132) DeprecationWarning: Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead:
bugid: https://github.com/Automattic/mongoose/issues/4291
一時的なソリューション:collectデータベースの前に
mongoose.Promise = global.Promise
http://stackoverflow.com/questions/38138445/node3341-deprecationwarning-mongoose-mpromise MongoDB -> MySQL
まず、なぜMongoDBからMySQLに移行するのですか?個人的に考えてみると、3つの状況があります.
https://www.mongodb.com/collateral/apache-spark-and-mongodb-turning-analytics-into-real-time-action
だからよく考えなければなりません.結論は以下の通りです.
アリ雲MongoDB
インストールには彼らの要求に従う必要があるほか、何の違いもないように見えます.環境がないのでテストできません.アリ雲ECSが必要