問題タブ [rdbms]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
optimization - PostgreSQLクエリの最適化とポストマスタープロセス '
私は現在、より大きなwikipedia-dumpから派生したPostgreSQLデータベースを使用しています。約40GBのデータが含まれています。データベースは、Suse Linux EnterpriseServer10を搭載したHPProliantML370G5サーバーで実行されています。単純なD-Linkルーターによって管理されているプライベートネットワークを介してラップトップからクエリを実行しています。ラップトップとサーバーの両方に静的DHCP(プライベート)IPを割り当てました。
とにかく、私のラップトップから、pgAdmin IIIを使用して、いくつかのSQLコマンド/クエリを送信します。これらのいくつかは、CREATE INDEX、DROP INDEX、DELETE、SELECTなどです。コマンド(CREATE INDEXなど)を送信すると、クエリが完全に実行されたことなどを通知するコマンドが返されます。ただし、このようなコマンドに割り当てられたポストマスタープロセスはコマンドはサーバー上でスリープ状態のままになっているようです。さて、私はこれを本当に気にしません。PostgreSQLはクエリを処理する準備ができているポストマスターのプールを維持していると自分自身に言います。それでも、このプロセスが9.4GBの割り当てられたRAMのうち6GBを消費する場合、私は心配します(そして今のところそうします)。これは、別のクエリで同じデータを使用する必要が生じた場合に備えて、[共有]メモリに保持されるデータのキャッシュである可能性がありますが、わかりません。
もう一つは私を悩ませています。
私は2つのテーブルを持っています。1つはページテーブルです。page_id列にインデックスがあります。もう1つは、page.page_id列の何も参照しないか変数を参照するpl_from列を持つpagelinksテーブルです。page_id列とは異なり、pl_fromには(まだ)インデックスがありません。テーブルの規模と実行可能な解決策を見つける必要性についてのアイデアを与えるために、ページテーブルには1340万行(不要なものを削除した後)があり、ページリンクテーブルには2億9300万行があります。
次のコマンドを実行して、ページリンクテーブルの役に立たない行を削除する必要があります。
したがって、基本的には、ページテーブルにないページからのすべてのリンクをページリンクテーブルから削除したいと思います。ネストされたループやシーケンシャルスキャンを無効にした後でも、クエリオプティマイザは常に次の「解決策」を提供します。
そのようなタスクは完了するのに数週間以上かかるようです。明らかに、これは受け入れられません。私はむしろそれがそのことをするためにpage_idインデックスを使用することを望んでいるように思えます...しかしそれは頑固なオプティマイザーであり、私は間違っているかもしれません。
database - だれか、私のデータベース設計がばかげている理由と、それを修正する方法を教えてください
ですから、私はこれらの車両、さまざまな種類の車両を持っています。すべてのタイプには、多くの属性を持つ独自のテーブルがあります。次に、すべてのテーブルのすべての車両の ID とタイプを保持する「車両」テーブルがあります。車両には写真を含めることができるため、「photos」テーブルに vehicle_id を使用して、写真を所属する車両にリンクさせます。
現在、すべての車両には装備のリストもあり、JSON 配列として単一の「装備」列に保存しています。
このようなもの: http://pastie.org/353195
特に機器の列で、どうすればこれを改善できますか?
datetime - 異なる RDBMS での DateTime の一貫した処理
さまざまな種類の RDBMS と通信するアプリケーションの分散システムを計画しています。要件の 1 つは、すべての RDBMS タイプで一貫した DateTime の処理です。すべての DateTime 値はミリ秒の精度である必要があり、TimeZone 情報を含め、1 つの列に格納する必要があります。
異なる RDBMS では日付と時刻の処理が異なるため、この場合、ネイティブの列の型に依存できないのではないかと心配しているため、別の解決策を考え出す必要があります。(ここで間違っていたら、道を教えてください。)
ソリューションは、それが何であれ、理想的には、SQL レベルでの簡単な並べ替えと比較を可能にする必要があります。読みやすさや SQL 日時関数を使用する機能など、その他の側面は重要ではありません。これはすべてゲートウェイ サービスによって処理されるためです。
DateTime 値を unsigned largeint 列型 (8 バイト) に格納するというアイデアをいじっています。問題のすべての RDBMS (MSSQL、Oracle、DB2、PostgreSQL、MySQL、おそらくその他のいくつか) が実際にそのようなタイプを /持っているかどうかは確認していませんが、現時点では、そうであると想定しています。
格納形式については...たとえば、2009-01-01T12:00:00.999+01:00 は ?20090101120000999?? のように格納でき、8 バイト未満になります。
この方法で保存できる最小の DateTime は 0001-01-01T00:00:00.000+xx:xx で、最大は 8000-12-31T23:59:59.999+xx:xx です。十分なスパンです。
unsigned largeint の最大値は 18446744073709551615 であるため、TimeZone 情報を格納するために次の 3 桁 (A と BB でマーク) が残ります: AxxxxxxxxxxxxxxxxxBB.
0001..8000 の最大年スパンを考慮すると、A は 0 または 1 のいずれかになり、BB は 00 から 99 のいずれかになります。
そして今、質問:
私の提案した解決策についてどう思いますか? それにはメリットがありますか、それとも単にばかげているだけですか?
他に良い方法がない場合、残りの 3 桁を TimeZone 情報に最適に使用するにはどうすればよいでしょうか?
sql - 縦から横?
次のような PostgreSQL テーブルがあります。
"->" は、最初の列が 2 番目の列を指す (ハイパーリンク) 2 つの列を区切ります。ここで、最初の列のすべての個別の値を取得し、それらが 2 番目の列で指すすべての値を含む ARRAY を割り当てて、インデックス サイズを縮小し、取得したい場所に近づけたいと考えています。
したがって、[多数] 行の単一列の結果セットを ARRAY 化したいと考えています。)のような関数を呼び出すことができればarrayify(SELECT column2 FROM table WHERE column1 = 'A'
、私の人生はとても楽になります。
誰でも、または誰でも知っていますか?
どうも
postgresql - PostgreSQL Long VACUUM
現在、2つのインデックスと2億5000万のアクティブな行、およびほぼ同じ数(またはそれ以上)のデッド行を持つテーブルをクリーンアップしています。クライアントコンピューター(ラップトップ)からサーバーにコマンドVACCUMFULLANALYZEを発行しました。過去3〜4日ほどビジネスを続けています。やらなければいけないことがたくさんあるので、もうすぐ終わるのではないかと思います!
サーバーには、クアッドコードXeon 2.66 GHzプロセッサ、12 GBまたはRAM、およびRAID1構成の2x 10K rpm 146 GBSASHDに接続されたRAIDコントローラーがあります。SuseLinuxを実行しています。不思議なんだけど...
さて、まず、VACUUMポストマスタープロセスは1つのコアのみを使用しているようです。第二に、I/Oアイドル時間の比率に対するI/O書き込みが非常に高くないことです。第三に、呼び出しからprocinfo
、VACUUMプロセスがほとんどの時間(88%)をI/0の待機に費やしていると推定できます。
では、RAIDコントローラーを過負荷にする(アイドル率に対するI / O書き込みを高くする)ために、スレッドを介してより多くのコアを利用しないのはなぜですか?I / O負荷が高くないのに、なぜI / Oを待機しているのですか?このすべてのパワー/リソースをすぐに利用できるのに、なぜ速くならないのでしょうか。VACUUMはマルチスレッド化できるし、マルチスレッド化する必要があるように思えます。特に、巨大なテーブルで動作していて、それが唯一動作している場合はそうです。
また、postgresql.confを構成してそのようなVACUUMをマルチスレッド化する方法はありますか?それを殺しても、部分的なクリーンアップの恩恵を受けることはできますか?そのテーブルで作業する必要があります。
[PostgreSQL8.1を使用しています]
再びThx
sql - DB2 SQL UDF のソースを表示する方法
DB2 コントロール センターで SQL UDF 本体を表示する方法はありますか?
python - カーソルは Python の DB-API でどのように機能しますか?
RDBMS (MySQL および PostgreSQL) で Python を使用してきましたが、カーソルの使用方法を本当に理解していないことに気付きました。
通常、クライアント DB-API (psycopg2 や MySQLdb など) を介してスクリプトを DB に接続します。
次に、カーソルを作成します。
そして、クエリとコマンドを発行できます。
クエリの結果はどこにあるのでしょうか。それはサーバー上にありますか?またはクライアントで少し、サーバーで少し?そして、いくつかの結果にアクセスする必要がある場合は、それらを取得します:
また
ここで、すべての行を取得するわけではなく、別のクエリを実行することにした場合、以前の結果はどうなるでしょうか? それらはオーバーヘッドです。
また、コマンドのすべての形式に対してカーソルを作成し、それらの同じコマンドに対して何らかの方法で継続的に再利用する必要があります。psycopg2 は、何度も実行されるが異なる値を持つコマンドを何らかの方法で最適化できると思いますが、どのように価値がありますか?
どうも
mysql - 映画データベースを設計する方法は?
私は彼らがデータベースデザインと呼んでいるこの気が遠くなるようなものに頭を悩ませようとしていますが、あまり成功していません。そこで、例を使って私の問題を説明しようと思います。
私はMySQLを使用していますが、ここに私の質問があります。
DVDコレクションを保持するデータベースを作成するとします。含めたい次の情報があります。
- 映画のタイトル
- 俳優
- 実行時間
- ジャンル
- 説明
- 年
- 監督
より効率的にするためにこれらの間に関係を作りたいのですが、方法がわかりません。
これが私がデータベース設計について考えていることです:
映画テーブル=>filmid、filmtitle、runningtime、description
年表=>年
ジャンルテーブル=>ジャンル
ディレクターテーブル=>ディレクター
アクターテーブル=>actor_name
しかし、これらのテーブル間に関係を作成するにはどうすればよいでしょうか。
また、自動的にインクリメントする主キーを使用してフィルムテーブルの一意のIDを作成しましたが、テーブルごとに一意のIDを作成する必要がありますか?
そして最後に、PHPフォームを使用して新しい映画をデータベースに更新する場合、このすべてのデータを(関係とすべてを含めて)どのように挿入しますか?
キース、あなたが与えることができるどんな助けにも感謝します
database - DBMS で使用されるデータ構造
Oracle、MySQL、Sqlite などの DBMS でレコードの保存と取得に使用されるデータ構造は何ですか。
database - テーブルのリビジョン/履歴?
リレーショナル データベースにテーブルの履歴/リビジョンを保持する最善の方法を見つけようとしています。
私はいくつかの調査と読書を行いましたが、変更を追跡するための最良の方法が何であるかはわかりません. 私の主なテーブルについては、追跡するためにリビジョン テーブルに落ち着いたと確信していますが (図を参照)、リレーション テーブルについてはよくわかりません。たぶん、変更を保持する監査証跡テーブルだけでしょうか?
以下のサンプル画像を見て、movies_has_actors
テーブルの履歴を保持する最良の方法は何ですか? リレーションが作成された時点でどの MOVIE Revision_id がアクティブであったかを知る必要があるため、2 つのメイン テーブル (映画、俳優) を単純に処理することはできません。また、どの USER がリレーションを追加したかを追跡したい場合はどうすればよいでしょうか (USER テーブルはサンプル画像にはありません)。リレーション テーブル自体にすべてを保持したくありません。それは、単に巨大になり、クエリが遅くなるからです...![代替テキスト][1]
要約すると、関係テーブルの履歴を保持する最良の方法は何ですか?
画像へのリンク: img115.imageshack.us/my.php?image=44623598nv1.jpg
[1]:イメージ