![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
winXPにインストールしたXAMP上における、
複数のデータベース(SQLite)に対し、
それぞれにおいて、1時間に数千件の読み書きを行い、
マシン自体が1時間に処理するデータ量の合計が10000件ほどの場合の、
その処理速度を上げたいと考えています。
この辺りのことについて、私には全く知識がないので、
考え方の指針すら手にしていない状態です。
そんな私が考えたことを述べますと、
・CPUの性能を上げれば良い?
(今の環境はAthlon64X2 4200+)
・ハードディスクを、読み書きの早いものにすれば良い?
(今の環境はHitachi HDT725032VLA360)
このような感じです。
なお、ソフト面(プログラミング言語やコード内容など)というより、
ハード面での対処で検討しています。
今より、少しでも処理を速める方法として、
コストパフォーマンスの優れたものがありましたら、
どなたか教えて下さい。
例)
・ハイテクマシン1台より、並マシン2台の方が処理も速く、そして安い?
・HDDはプラッタ枚数によって、こんなにも読み書きが速くなる?
・SSDの方が速い?
・HDD容量は無駄に大きなものより、小さなものの方が速い?
・OSは、Win7の方がWinXPより速い?もっと言えば、Linuxの方が速い?
と、私が思いつく、改善案かな?と思えることはこれくらいです…。
以上、宜しくお願いします。
No.2ベストアンサー
- 回答日時:
オンメモリはテストでオープンしただけですが、Webで参考になるURLを添付したので参照してみて下さい。
http://d.hatena.ne.jp/mgng/20091104/1257315625
当然、終了時にHDDに書き出さないと消滅するので「オンメモリにするための処理と、終了時にHDDに書き込む処理」を含めてトータルで処理時間を検討しないといけないですが検討する価値はあると思います。
>それぞれにおいて、1時間に数千件の読み書きを行い、
>マシン自体が1時間に処理するデータ量の合計が10000件ほどの場合の
1時間で数千件や1万件程度のデータ操作なら、そんなに気にするほどのことはないように思います。
それにSQLiteは、本格的なデータベースというより開発時のテスト環境的な使い方が最適と思います。 実運用で使った時、ユーザという概念がないことは問題になりませんか?
お話を伺い、オンメモリを使った方法を検討してみたくなりました。
私の用件にマッチしているかどうかは試してみないことにはわかりませんが、
調べてみる価値はありそうです。
で、この方法の場合、大量のメモリを用意する必要があるようですが、
大量というのは具体的にはどの程度になりますでしょうか。
現在、マシンには2GBのメモリが載っていますが、
32bitマシンであるため、4GBは載らない?かと思います。
このような環境で、オンメモリでの運用は可能だと思われますでしょうか。
次に、SSDを使った方法についてですが、
こちらは、オンメモリの方法を選んだ場合には、候補から除外される類のものでしょうか。
それとも、両者を同時に導入することには価値がありそうでしょうか。
システムをSSDにすることで、OSやXAMPの動きが速くなったり、
最終的に行われる、データベースへの書き込みも速くなりそうですからね。
処理内容にもよるでしょうが、
これらの改善を全て行ったとして、得られるスピードが2倍以上あるといいのですが、
それほど改善されないようだと、正直なところ、悲しくなりそうです。(笑)
No.4
- 回答日時:
>これらの改善を全て行ったとして、得られるスピードが2倍以上あるといいのですが
データベースの高速化は、ハードウェア的なのもは想定していない前提条件になります。 簡単に変更できないため。
基本、ハードウェアをデータベース用にチューニングし、その後はデータベースのパラメータやSQL文を検討して高速化するという手順です。
Oracleでの実績でいうと、単純にインストールした状態から、稼動したデータベースに合わせてパラメータのチューニングを行って倍以上に高速化し、その後はインデックスやテーブルを見直して目標の速度に近づけるって感じでチューニングを進めます。
なお、SQLiteでは、パラメータの見直による高速化はあまり期待できないです。
2Gbでどの程度のデータベースがオンメモリ上に展開できるかは、行のサイズによるので・・・実際に展開して確認する方が早いと思います。 当然OSやSQLiteの領域もあるので、1Gbを越すことは無理な気がします。
またしてもありがとうございます。助かります。
>基本、ハードウェアをデータベース用にチューニングし、その後はデータベースのパラメータやSQL文を検討して高速化するという手順
>2Gbでどの程度のデータベースがオンメモリ上に展開できるかは、行のサイズによるので・・・実際に展開して確認する方が早い
こちら、非常に参考になりました!
おかげさまで、
すべきこと、できる範囲、それぞれ見えてきた気がします。
No.3
- 回答日時:
OSはWindowsよりもLinuxの方が良いでしょう
ファイルシステムをEXT3にするのであれば
ジャーナリングモードでファイルの保存性とトレードオフで速度を調整する事が可能です
SQLiteを利用した事がないですが、RAWデバイスを利用するとI/Oのオーバーヘッドを軽減出来ることが多いです。
ボトルネックがどこに出るかによって何が最適かは変わります。
1番はHDDの可能性が高いですが、SQL文によってはCPUがネックになる場合もあります
(その場合は、SQL文を書き直すべきですが)
大変興味深い回答をありがとうございます。
Linuxもいいなと思えてきました。
>1番はHDDの可能性が高いですが、SQL文によってはCPUがネックになる場合も
HDDをSSDに、もしくは、読み書きの速そうなHDDに換えてみることには、
少なくともなんらかの価値はありそうですね。
で、気になったのが、
「SQL文によってはCPUがネックになる場合も」
です。
具体例をお聞きしても、おいそれとは出てこないよ、
と言われてしまいそうですが、
もし何かヒントでも頂ければ、とても嬉しく思います。
ちょっと自分でも考えてみました。
SQL文の見方として、以下の4パターンがあるのでしょうか?
(1)CPUに優しく、HDDにも優しい
(2)CPUには優しいが、HDDには優しくない
(3)CPUには優しくないが、HDDには優しい
(4)CPUにも、HDDにも優しくない
「SQL文によってはCPUがネックになる場合も」
というのは、
(3)か(4)のパターンということですよね。
で、SQL文をどう書こうと、その目的が同じであれば、
HDDに対して行われる処理、つまり、書き込み、読み込みは、
同じであると思えるので、
(3)のパターンを改善した結果、(2)のパターンになってしまうとは思えず、
また、同様に、
(4)のパターンを(1)のパターンに改善することも無理なのではと考えました。
つまり、
(3)だったら、(1)へ、
(4)だったら、(2)へ、
の改善しか、それぞれできないのかなと思ったわけです。
何か変なことを言っていましたら、すみません。
考え方的に、何かおかしな点があれば指摘して頂けると嬉しいです。
ということで、
いずれにしても、(3)か(4)が疑わしい場合には、
SQL文を改善することで、いくらかマシな(1)か(2)へと昇格でき、
(1)か(2)でさらに処理速度を上げるには、
HDDを改善すれば良いのかなと。
よって、とりあえずは、
HDD、SQL文、CPU、OS
を見直してみるのが良さそうですね。
No.1
- 回答日時:
>ソフト面(プログラミング言語やコード内容など)というより、ハード面での対処で検討しています。
・メモリを大量に準備して、全てオン・メモリで運用が最速と思います。
-------------
・高速なHDDを使う( SSDならよりベター )
・HDDをRAID0で利用する( 当然、最適なブロックサイズで運用 )
>OSは、Win7の方がWinXPより速い?もっと言えば、Linuxの方が速い?
そんなに差はないと思います。
>・HDD容量は無駄に大きなものより、小さなものの方が速い?
比較するなら、アクセス速度(ランダムアクセス)を比較して早いHDDを選択すべき
プラッター数やキャッシュ容量によって傾向はありますが、絶対的な指標にはならないと思います。
回答ありがとうございます。
>全てオン・メモリで運用
データを一時的に使うのではなく、
使った後、記録として残すタイプのDBなのですが、
それでも、この「オンメモリ」の方法は使えますでしょうか?
HDDを介さず、メモリだけで処理できれば速そうだなとは思っていましたが、
この方法だと「記録保存」が出来ないだろうと思い、検討候補から除外していました。
>高速なHDDを使う( SSDならよりベター )
SSDだと記録回数の上限値がHDDに比べて小さいらしいのですが、
1時間あたり10000件の読み書きには向いていそうでしょうか。
またよろしければ色々と教えて下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パソコン画面設定の仕方を教え...
-
Androidエミュレータでレーシン...
-
ATX_12Vの電源ですが、普通は8...
-
Mini PCでRyzen 8845HS 7840HS...
-
弟のスペックが低めのpcを低価...
-
windows11が使える最安値の構成...
-
パソコンのメモリ8gbから16gbに...
-
電源ユニットについて教えて下さい
-
数年前にps4の読み込み速度が上...
-
PCが起動しない(ファンは回る)
-
デスクトップPCの動作を軽くす...
-
パソコンのモニタースピーカー...
-
パソコンって、これからの時代...
-
パソコン設定 一台の端末で複数...
-
緊急です!windows 98を搭載し...
-
ディープクールの電源ユニット...
-
Macの外付けHDDが重くて作業が...
-
デスクトップパソコンで無線の...
-
ガレリアのデスクトップPCです...
-
デスクトップ画面を4分割するには
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
住所コード11桁の住所データ...
-
ORA-01102 排他モード?
-
SQLServer2005におけるXML型の...
-
データベースの選択について
-
データベースリンク
-
OracleでUnicode対応にしたい
-
ACCESSのデータベースウィザー...
-
Webデータベースの構築に関して
-
データベースの書き込み・読み...
-
SIDとSERVICE_NAMEの違いとは?
-
ORA-12170のエラーについて
-
.NET Frameworkがコントロール...
-
Windows Storeを使わずに付箋を...
-
CloverをインストールしたUSBメ...
-
DB2で SQL1032N start databas...
-
突然オラクルへ接続できなくな...
-
Oracle11g SQLPlusログインにつ...
-
oracleのメモリ使用量が97%ほど...
-
倒産した18禁ゲーム会社のパ...
-
データベース接続情報作成しま...
おすすめ情報