質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

NoSQL

NoSQL(not only SQL)は、リレーショナルデータベース管理システムとは異なるデータベースシステムを指す言葉です。

トランザクション

トランザクションとは、関連・依存する処理を一連の不可分な処理単位として扱う処理方式を指します。トランザクションとして管理された処理は「すべて成功」か「すべて失敗」のいずれかであることが保証される。処理に失敗した場合は、一連の処理がロールバックされます。

ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

Q&A

解決済

3回答

1846閲覧

ファイルI/Oについて

kkkmokotan

総合スコア45

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

NoSQL

NoSQL(not only SQL)は、リレーショナルデータベース管理システムとは異なるデータベースシステムを指す言葉です。

トランザクション

トランザクションとは、関連・依存する処理を一連の不可分な処理単位として扱う処理方式を指します。トランザクションとして管理された処理は「すべて成功」か「すべて失敗」のいずれかであることが保証される。処理に失敗した場合は、一連の処理がロールバックされます。

ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

0グッド

0クリップ

投稿2016/10/21 18:26

MySQLのデータベースログを常時解析してデータの更新を検知する手法を学びました。データベースのログといってもファイルなのですから工夫しない限り常時監視という手法はかなり高いI/Oコストや解析コストがかかると思います。
さらに実際のプロダクトではデータベースの吐き出すログは非常にデータサイズが大きいと思います。

ここで質問なのですが例えばマルチスレッディングのプログラムでいくつものスレッドでファイルを読み通り専門にして参照し、異なるファイルのインデックス地点(例えばログファイルのうち何行目か、など)を参照させてファイル解析のスループットをあげるといったことは可能なのでしょうか?

その手法では、データベースログの読み取り始める箇所をばらばらにしておいて(なんらかの並列処理で)一気に読み始めていち早くアップデートに関するログを解析する。。。といったものでしたがデータベースログの知識に乏しいため実際にどのように実装しているのか想像できませんでした。そもそも一つのファイルなのだから単一スレッドで読んでいくスピードが実質最速なのかなとも思いますので学んだ手法がどのようなことをいっているのかわかりません。。。。

どなたかアドバイスをよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ファイルサイズが大きくても、更新内容を読み取るのに毎回ファイル先頭から読み直す必要はないです。開いたファイルの読み取り位置ををファイル終端に移動しておき、ファイルの変更を検知したら増分を読み取る、というやりかたを普通はします (要するにtail -fでやっているのと全く同じことです)。Swatchのようなツールがこの手法を使っています。

なおこの場合、ディスクI/Oやバッファリングの影響が非常に大きいため、マルチスレッドにしても速度面のメリットは全くなく、シングルスレッドでかまわないと思います。またこの手法自体、多用すればパフォーマンスに影響しますので、ある程度規模が大きいのならほかの方たちが回答しておられるような手法も検討されるべきとおもいます。

投稿2016/10/22 01:46

編集2016/10/22 01:48
ikedas

総合スコア4315

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

何を何でどう学んだかのがわからないので既知の話かもしれませんが…

本気でログ解析を行う場合は、ログを吐くホスト上では行わず、ログ収集サーバへログを飛ばし、さらにログ解析サーバで解析する事が多いと思います。

今風にやるなら「Elasticsearch」「Logstash」「Kibana」の組み合わせで、がっつりやったり、「fluentd」でとりあえず集めてあとは自前で…とかでしょうか

投稿2016/10/22 00:16

hana-da

総合スコア1728

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

独自でログを分析するとデータベース・サーバは性能劣化すると思われますが、それは許容されるということでしょうか?

通常はデータベース・サーバの性能劣化を避けるために、アプリケーション・サーバ側に追跡の仕組みを入れるものですが、コードの修正が困難でRDBMS側で対応させたい時は「監査」と呼ばれる機構を使って、ユーザの操作を追跡したりします。MySQLにもその手のプラグインはあるようですよ。

6.3.12.1 監査ログプラグインのインストール - MySQL5.6リファレンスマニュアル

McAfee MySQL Audit Plugin で MySQL の監査ログを採取する

投稿2016/10/22 00:02

IwaoWatanabe

総合スコア51

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問