データベース管理者

データベースのスキルを向上させ、コミュニティの他の人から学びたいデータベースの専門家向けのQ&A

2
センサーアレイから大量のデータを保存する
私は、巨大なセンサーアレイからのデータサンプルを保存するソリューション(appおよびdb)を実装することを任されました。アレイは現在約20,000個のセンサーで構成されていますが、まもなく100,000個のセンサーに拡大します。各センサーは10秒ごとにデータサンプルを送信し、各サンプルのサイズは28バイトです。 したがって、合計を行うと、次のようになります。 1日あたりセンサーあたり8640サンプル 1日あたりセンサーあたり242kBのデータ 1日あたり864百万サンプル 今、データを保存/取得する最善の方法は何だろうと思っていますか?ソフトウェアが既に指定された後、私はこのプロジェクトに「参加」したので、SQL Serverを使用してWindowsプラットフォームに実装する必要があります。 私の頭の中の現在の解決策は、データサンプルを格納する2つのテーブルを持つDBを作成することです。1つ目は2つ目のインデックスの一種として機能し、センサーごとに1日あたりのバイナリフィールドに照合サンプルを格納します。 Table 1: RecordID - BigInt - Identity SensorID - BigInt - Primary Key Date - DateTime - Primary Key (yyyy-mm-dd) Table 2: RecordID - BigInt - Primary Key (from an insert into Table 1) Data - Binary 基本的に、すべてのセンサーのサンプルを一時ファイル(センサーごとに1つ)に書き込みます。毎日の終わりに、表1のエントリを作成し、生成されたRecordIDを使用して、ファイルを表2のデータフィールドにダンプします。 この方法では、8億4400万エントリではなく、1日あたり100,000エントリしかテーブルに登録されません。データはLANまたは高速WANで利用可能である必要があります。そのため、1日単位でセンサーデータを取得できます。 すべてのデータを保存する必要がありますが、ほとんどのデータはおそらく読み込まれません。そのため、テーブルの読み取りの量は書き込みよりも大きくなることはありません。 データファイルへのパスを保存するだけで、ファイルシステムを使用して何かを実装できることは知っていますが、バイナリフィールドが256kB未満の場合、SQL ServerはNTFSよりも優れていることを読みました。(256 …

1
小規模なWebチームのローカルデータベース開発プロセスを設定する方法
バックグラウンド 私は、約4人のプログラマーと4人のデザイナーから成る小規模なWebチーム向けに新しい開発プロセスの作成に取り組んでいます。将来的にチームを成長させる可能性があることは明らかです。当社の製品は、当社が設計およびホストするクライアントWebサイトを強化する中央アプリケーションです。 以前は、1つの開発データベースを使用して、開発サーバーでFTPを介して作業していました。それは「働いた」*私たちのプロセスを成熟する時間ですので、しばらくの間、私たちは新たな方向に動いています。 Percona Server 5.5を使用していますが、これはデータベースにとらわれず、コストを低く抑えることを考えたものでなければなりません。 目標: 私は、以下を念頭に置いて、データベース開発のための継続的インテグレーション(CI)プロセスの作成を検討しています。 開発者には、開発コードを実行するためのデータのローカルコピーがあります データベース構造を以前の変更セットにロールバックできる 新機能スキーマの変更とスキーマ設計修正の変更を区別できる テストのためにデータベース構造をローカルで変更可能 初期コンセプト SVNとLiquiBaseを使用して以下のプロセスをスケッチしましたが、完全に削除され#4ます。 トランクから「開発」ブランチを作成する 中央の「開発」データベースサーバーは「開発」ブランチから実行されます ローカル開発者は、開発ブランチのスレーブとしてセットアップされます(#1上記を提供) LiquiBaseをチェンジは(この開発サーバーへのスレーブとして動作しているローカルマシンにトリクルダウンします)中央開発用データベースを更新するために、ポストcommitフックを実行する開発ブランチに定期的にコミットしている(LiquiBaseをが提供する#2上で) 機能またはスキーマの修正がQAに進む準備ができたら、DBA(me)は開発ブランチからトランクに適切な変更をマージします。この行為は、ステージングデータベースサーバーに適用するSQLスクリプトを作成します。 ステージングサーバーはTRUNKを反映する必要があります。TRUNKは、本番と同じ構造に加えて、QAにある変更を含む必要があります ステージングサーバーでsqlスクリプトを実行した後、変更に対していくつかのQAを実行します。 すべてが正常に見える場合は、構造にタグを付けます。これにより、DBAによって本番環境で手動で実行される.sqlスクリプトが生成されます(必要に応じてオフピーク時間)。 このプロセスでは、すべての開発者が同じ「開発」ブランチから実行する必要があります。つまり、データベーススキーマのバージョンは常に1つだけです(これが必要かどうかはわかりません)。 また、スキーマへの変更はローカルでテストできず、正しく行わないと他の開発者に影響を与える可能性があります。この環境では、開発者は新しいテーブルを追加するかもしれませんが、既存の構造を変更することはめったにありません。DBAとして、設計修正は私によって行われます。しかし、修正をローカルでテストできないことは、プロセスの最大の問題です。 上記のプロセスを微調整して、ローカル開発を可能にしながら、データの比較的最新のコピーを維持するにはどうすればよいですか(提案されたプロセスの複製によって提供されます)。先週までデータを最新にする必要はありません。 *「働いた」とは、それで十分であるが、PITAだったことを意味します。

3
SQL Server CLRのサードパーティdll
SQL Server CLRのトリガーc#コードでサードパーティのDLLを使用する必要があります しかし、参照を追加しようとすると、SQL ServerからのDLLが表示されるだけです。 サードパーティのdllをSQL Server に追加するにはどうすればよいですか?
14 sql-server  c#  sql-clr 


5
PL / SQL:配列内の要素をカウントする最良の方法?
これを考えると: DECLARE TYPE T_ARRAY IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER; MY_ARRAY T_ARRAY; V_COUNT INTEGER; やりたいこと: BEGIN -- ... some code filling the MY_ARRAY array -- obviously COUNT_ELEMENTS() does not exists, this is what I'm looking for :-) V_COUNT := COUNT_ELEMENTS(MY_ARRAY); DBMS_OUTPUT.PUT_LINE('My array containts ' || V_COUNT || ' elements.'); …
14 oracle  plsql 

6
MySQLでのテーブルの分割。いい練習?
私は既存のプロジェクトで作業を開始し、前の開発者は、テーブルを、スキーマは同じでもデータが異なる10個の個別のテーブルに分割していました。 テーブルは次のようになります。 [tableName_0] [tableName_1] [tableName_2] [tableName_3] [tableName_4] [tableName_5] [tableName_6] [tableName_7] [tableName_8] [tableName_9] 主キーは整数idフィールドです。アプリケーションは、ハッシュアルゴリズム(idmod 10)を使用して、ルックアップ時にアクセスするテーブルを認識します。たとえばid= 10に生じるであろう[tableName_0]。 合計すると、テーブルにはおそらく100,000行あり、成長率は比較的低くなります。 だから、私の質問は、これが実行可能な解決策であるかどうか、それがどんな状況でも良い方法であるかどうかです。私の理論は、それらを組み合わせるようにプッシュすることですUNION。主な欠点は、すべてのアプリケーションコードを変更することと、長期的に見ても価値があるかどうかです。

6
SQL Query Formatter [終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、データベース管理者のStack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 (Linuxベースの)SQLクエリフォーマットプログラム/プラグイン/拡張機能はありますか? 私はPostgreSQLとMySQLを使用していますが、他のDBも歓迎します。 VMを使用してテストできますが、Linux(Ubuntu)ベースのソリューションを希望します。 オンライン版を見たことがありますが、インストール可能なものはありません。 EclipseベースのIDEもプラスです 例: select f1, f2, fname, lName from tblName where f1 = true and fname is not null order by lName asc のようなものに SELECT f1, f2, fname, lName FROM tblName WHERE f1 = true AND fname IS NOT NULL ORDER BY …
14 postgresql 


1
PostgreSQLのフェールオーバーとレプリケーション
PostgreSQL 9.1を評価していますが、フェイルオーバーとレプリケーションの詳細に関連する質問はほとんどありません。 テストシナリオはほとんどありません。マスターサーバーと少数のスレーブを備えた最初のサーバー。マスターがクラッシュした場合、スレーブの1人がマスターになります。マスターが通常の状態に戻った後、クラスター内の他のサーバーと同期し(ダウン中に行われたすべての変更を適用)、マスターの役割を要求するか、スレーブになります。 PostgreSQLで見られる問題と現在のシナリオは次のとおりです。 1)マスターサーバーの停止を検出するための組み込みツールが表示されません。pgpoolがそれを処理し、トリガーファイルを作成できることを読みました。また、人々はこれにLinuxのハートビートまたは類似のツールを使用していることも読みました。さて、フェールオーバーを検出して、クラスター内に新しいマスターを割り当てることができます。他のスレーブは、新しいマスターが存在することを理解し、今すぐバックアップする必要がありますか? 2)フェールバック手順がわかりません。マスターとスレーブのホスト構成は異なります。マスターフェイルバックがクラッシュした後、2つのマスターを使用できますか?サーバーはどのように同期しますか?「データフォルダーをサーバーに転送して再起動する」などの手動のソリューションのみを見ました。それでは、ここでの解決策やベストプラクティス、または少なくとも主要な原則は何ですか? 3)クライアント側でサーバーの停止を処理するにはどうすればよいですか?接続を作成するときに、サーバーIPを明示的に指定します。マスター-スレーブ構造を認識し、マスターのみにリクエストを送信し、接続が失われた場合にバックアップサーバーに切り替えるなど、何らかの種類のConnectionManagerを開発する必要がありますか?私は、pgpoolがアプリケーションのエントリポイントとなり、正しい方法で接続を管理できることを読みました。ここではpgpoolのみが解決策ですか?フェールオーバーとフェールバックを適切に処理しますか? 4)手動でデータをコピーし、PostgreSQLインスタンスやその他の手作業で行うべきものを再構成することを避けるためのソリューション(商用)もありますか?だから、全員が同期しているときのクラスター構成のようなもので、誰がマスターであり、すべてがオペレーターの注意なしに自動的に切り替わるのかは明らかですか? これらのスレッドと記事によると PostgreSQLでのストリーミングレプリケーションとフェールオーバー PostgreSQL 9.1でのフェイルオーバーの自動化 http://denishjpatel.blogspot.com/2010/11/possibility-of-graceful-switchover.html これらの疑問を解決するための単一の完全自動ソリューションはありません。私は正しいですか? ありがとう!

2
PostgreSQLでのストリーミングレプリケーションとフェールオーバー
PostgreSQLレプリケーションの概念実証を行っています。フォーラムでの議論の後、パフォーマンスが他のソリューションと比較して優れているため、ストリーミングレプリケーションを使用することにしました。PostgreSQLは、ストリーミングレプリケーションの自動フェールオーバーを提供していません。トリガーファイルを使用してスレーブをマスターに切り替えることはできますが、管理はできません。そこで、自動フェイルオーバーと高可用性を備えたソリューションが欲しいのです。 さまざまなソリューションが利用可能です。 Repmgr Linuxハートビート Pgpool-II(自動フェイルオーバーのみ) 使用した場合のその他のツール。 私の質問は、どのソリューションを使用する必要があるのですか?

3
mysqlをpostgresqlに変換する方法は?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、データベース管理者のStack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 大きなmysqlデータベースをpostgresqlに変換する変換ツールを切望しています。ツール/スクリプトが必要です: 自由 Linuxで動作します 使いやすく、バグがありません 実際に試してみて、動作することを確認しました できれば、JavaまたはRubyで作成しないでください ここにリストされているさまざまなツールを試しましたが、うまくいきませんでした。 前もって感謝します。

3
自動化された方法でOracle DDLをスクリプト化する
Oracle SQL DeveloperはTools -> Database Export...これを介してDDLをエクスポートできますが、これは非常に効果的ですが、手動による介入が必要です。 私は知っDBMS_METADATA.get_ddl()ていますが、エクスポートが完璧ではないことを発見しました。エクスポートされたDBMS_METADATADDLが、キーワードの途中での区切りなどの問題を修正することなく使用できないという問題に遭遇しました。ただし、DMBS_METADATA手動で修正することなく実行できるDDLのエクスポート方法を知っている人がいれば、それも素晴らしい解決策になります。 基本的に、手動でエクスポートしたものと同じ DDLをエクスポートする自動/スクリプト可能な方法を探しています。 どうやってやるの?

2
MySQL Master-Slave Replication Setupを作成してトラブルシューティングする最良の方法は何ですか?
私はデータベース管理を始めたばかりです。 mysqlマスター/スレーブレプリケーションのセットアップ中に多くの問題に直面します。 また、通常のmysqlレプリケーションのトラブルシューティングの問題に直面しています。 誰もがこれらすべてに対処する方法を理解するのに役立ちますか?

2
OracleBulkCopyの具体的な機能とパフォーマンスを最適化するにはどうすればよいですか?
詳細を要約すると、約500万行をベンダー(Oracle)データベースにステージングする必要があります。OracleBulkCopy(ODP.NET)を使用して50万行のバッチですべてがうまくいきますが、5Mにスケールアップしようとすると、1Mマークに達するとパフォーマンスが低下してクロールになり、行がロードされるにつれて徐々に遅くなり、最終的には3時間程度でタイムアウトします。 テーブルの主キーに関連していると思われますが、情報と私が読んでいる多くのことのためにOracleフォーラムとStack Overflowを探し回っています(また、多くの投稿が互いに矛盾しているようです) 。私は誰かがプロセスに関するいくつかの密接に関連した質問にまっすぐに記録を立てることができることを望んでいます: ないOracleBulkCopyクラスは、従来の、またはダイレクト・パス・ロードを使用しますか?何らかの方法でこれを確認できますか? 仮定すると、それはありません使用ダイレクト・パス・ロード:それはOracleが自動的にロードおよびプットバックオンラインその後、それらの間に使用不可能にすべてのインデックスを設定していることは本当ですか?私はこの効果に関するいくつかの声明を読みましたが、繰り返しますが、確認することはできません。 #2がtrueの場合、一括コピー操作を開始する前に、テーブルにどのインデックスが存在するか違いがありますか?もしそうなら、なぜですか? #3に関連して、一般に、使用できないインデックスを使用したバルクロードと、ロードの前に実際にインデックスを削除してから再作成する間に、実際的な違いはありますか? #2が正しくない場合、または理解していないいくつかの警告がある場合、バルクロードの前に明示的にインデックスを使用不可にし、その後 明示的に再構築することは違いがありますか? インデックスビルド以外に、レコードが追加されるにつれて一括コピー操作が徐々に遅くなる原因はありますか?(たぶん、ロギングと関係がありますが、バルク操作はログに記録されないと思われますか?) 最初にPK /インデックスを削除する以外にパフォーマンスを完全に向上させる方法が他にない場合、インデックスが完全に消えないようにするためにどのような手順を実行できますか。つまり、データベースへの接続が失われた場合プロセスの途中?
14 oracle  bulk 

4
1つの大きなデータベースといくつかの小さなデータベース
(A)テーブルプレフィックスを使用して1つのMySQLデータベースにアプリケーションのインスタンスをデプロイするか、(B)アプリケーションの各インスタンスに異なるMySQLデータベースを使用できる状況があります。たとえば、 セットアップ「A」: central_database app1_table1 app1_table2 app1_tablen ... appn_table1 appn_table2 appn_tablen 最終結果は、多くのテーブルを持つ大きなデータベースになります。 セットアップ「B」: app1_db table1 table2 tablen ... appn_db table1 table2 tablen 最終結果は、いくつかのテーブルを持つ多くのデータベースになります。 すべてが等しい(データの量、アプリインスタンスの数など)、どちらのアプローチを採用する場合の長所と短所は何ですか?データベースのパフォーマンスとメンテナンスに有害なものは何ですか?アプリケーションはPHP 5ベースで、Apache 2.xで実行され、MySQL 5.xを実行しています。 あなたの時間と考えに感謝します!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.