データベース管理者

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

10
データベースレイヤーにアプリケーションロジックを配置することに対する、またはそれに対する議論は何ですか?
注 Programmers.seとdba.seの対象者は異なり、異なる視点を持つため、この場合、データベースレイヤーにアプリケーションロジックを配置したり、配置したりするための議論は何ですか?Programmers.seで。 これに関するdbaについての議論はすでに見つかりませんでした。元の投稿にはそれがすべて記載されています。 ほとんどのソフトウェア開発者は、アプリケーションロジックをアプリケーションレイヤーに保持することを望んでおり、おそらくここに保持するのが自然であると感じるでしょう。データベース開発者は、トリガーおよびストアドプロシージャとして、アプリケーションロジックをデータベース層に配置したいと考えているようです。 個人的には、アプリケーション層にできるだけ多くの層を残して、層のデバッグを容易にし、層の責任を分離しておくことを好みます。 これについてどう思われますか。また、データベースレイヤーに実装しても問題ない、またはすべきでないものは何ですか? NB私はその質問のOPではありませんが、元の文言はそのまま残しました。

5
数十億行のデータに最適なデータベースとテーブルの設計[終了]
大量の電気データと温度データを保存および分析する必要があるアプリケーションを作成しています。 基本的には、過去数年間および数万の場所について今後数年間にわたって大量の時間ごとの電力使用量の測定値を保存し、それほど複雑ではない方法でデータを分析する必要があります。 (今のところ)保存する必要がある情報は、ロケーションID、タイムスタンプ(日付と時刻)、温度と電気使用量です。 格納する必要があるデータの量については、これは概算ですが、これらの行に沿ったもの: 20 000以上の場所、1か月あたり720レコード(1時間あたりの測定、1か月あたり約720時間)、120か月(10年前) )そして何年も先。簡単な計算により、次の結果が得られます。 20の000の位置は、720のレコード(10年前)×120ヶ月= X 1つの728 000 000レコード。 これらは過去のレコードです。新しいレコードは毎月インポートされるため、1か月あたり約20 000 x 720 = 14 400 000の新しいレコードになります。 合計ロケーションも着実に成長します。 そのすべてのデータで、次の操作を実行する必要があります。 特定の日付および期間のデータを取得します。日付01.01.2013から01.01.2017の間、および07:00から13:00の間の特定のロケーションIDのすべてのレコード。 特定の日付と時間範囲に対する簡単な数学演算、たとえば、07:00から13:00までの5年間の特定のロケーションIDのMIN、MAX、およびAVG温度と電力使用量。 データは毎月書き込まれますが、何百ものユーザーによって(少なくとも)常に読み取られるため、読み取り速度は非常に重要です。 NoSQLデータベースの経験はありませんが、私が収集したものから、ここで使用するのに最適なソリューションです。最も人気のあるNoSQLデータベースについて読んだことがありますが、それらは非常に異なっており、非常に異なるテーブルアーキテクチャを可能にするため、使用するのに最適なデータベースを決定することができませんでした。 主な選択肢はCassandraとMongoDBでしたが、私は非常に限られた知識しかなく、大きなデータとNoSQLに関しては実際の経験がないため、あまり確信がありません。また、PostreSQLはそのような量のデータを適切に処理することも読みました。 私の質問は次のとおりです。 このような大量のデータにNoSQLデータベースを使用する必要があります。そうでなければ、MySQLに固執できますか? どのデータベースを使用すればよいですか? 特定の期間のデータをすばやく取得および処理するために、日付と時刻を別々のインデックス付き(可能な場合)列に保持する必要がありますか、またはタイムスタンプを単一の列に保持することでこれを実行できますか? ここで時系列データモデリングアプローチは適切ですか?そうでない場合は、適切なテーブル設計のためのポインターを教えてもらえますか? ありがとうございました。

2
別のドメインでWindows認証を使用してSQL Serverに接続する
別のドメインのVPN上のリモートSQL Serverに接続しようとしています。SQL Serverにサーバー名を入力し、[追加の接続パラメーター]を選択して、学校で必要なものを追加します。 Integrated Security=SSPI; User ID=DOMAIN\username; Password=Password 次のエラーが表示されます。 ログインに失敗しました。ログインは信頼できないドメインからのものであり、Windows認証では使用できません。

5
PostgreSQLでのインデックスの機能
PostgreSQLでのインデックスの動作に関していくつか質問があります。Friends次のインデックスを持つテーブルがあります。 Friends ( user_id1 ,user_id2) user_id1そしてテーブルuser_id2への外部キーですuser これらは同等ですか?そうでない場合、なぜですか? Index(user_id1,user_id2) and Index(user_id2,user_id1) 主キー(user_id1、user_id2)を作成すると、自動的にインデックスが作成され、 最初の質問のインデックスが同等でない場合、上記のプライマリキーコマンドでどのインデックスが作成されますか?

6
SQL Serverは現在使用中のため、データベース<dbname>を削除できませんが、セッションは表示されません
データベースを削除しようとすると、「データベース "dbname"は現在使用中のため削除できません」というエラーが表示されます。ただし、実行するとsp_who2、このデータベースに接続されているセッションは絶対にありません。また、データベースをに設定しましたsingle_user mode with rollback immediate。 なぜこうなった?

6
NoSQLと従来のRDBMSの違いは何ですか?
NoSQLと従来のRDBMSの違いは何ですか? 過去数か月間、NoSQLは技術ニュースで頻繁に取り上げられてきました。従来のRDBMSと比較して最も重要な機能は何ですか?差異はどのレベル(物理的、論理的)で発生しますか? NoSQLを使用するのに最適な場所はどこですか?どうして?

1
ターゲット表のサブセットをマージします
MERGEステートメントを使用してテーブルの行を挿入または削除しようとしていますが、それらの行のサブセットのみを操作したいです。のドキュメントにMERGEは、かなり強い言葉で警告があります: マッチングの目的で使用されるターゲットテーブルの列のみを指定することが重要です。つまり、ソース表の対応する列と比較されるターゲット表の列を指定します。AND NOT target_table.column_x = valueを指定するなど、ON句でターゲットテーブルの行をフィルタリングしてクエリのパフォーマンスを向上させないでください。これを行うと、予期しない誤った結果が返される場合があります。 しかし、これはまさにMERGE仕事をするために私がしなければならないように見えるものです。 私が持っているデータは、次のようなアイテムとカテゴリ(たとえば、どのアイテムがどのカテゴリに含まれているか)の標準的な多対多の結合テーブルです。 CategoryId ItemId ========== ====== 1 1 1 2 1 3 2 1 2 3 3 5 3 6 4 5 私がする必要があるのは、特定のカテゴリのすべての行を新しいアイテムのリストで効果的に置き換えることです。これを行う最初の試みは次のようになります。 MERGE INTO CategoryItem AS TARGET USING ( SELECT ItemId FROM SomeExternalDataSource WHERE CategoryId = 2 ) AS SOURCE ON SOURCE.ItemId = …

8
MySQL 5.5でutf8テーブルをutf8mb4に簡単に変換する方法
現在、4バイト文字(中国語)をサポートする必要があるデータベースがあります。幸いなことに、MySQL 5.5はすでに実稼働しています。 したがって、utf8_binからutf8mb4_binまでのすべての照合を作成したいと思います。 この変更によるパフォーマンスの損失/利得は、ストレージのわずかなオーバーヘッド以外にはないと考えています。
71 mysql 

4
パスワードプロンプトなしでpsqlを使用するには?
REINDEXデータベース内のインデックスを作成するスクリプトを作成しました。それらの1つを次に示します。 echo -e "\nreindex for unq_vbvdata_vehicle started at: `date "+%F %T"`" &gt;&gt; ${LOG_FILE} psql -U ${USERNAME} -h ${HOSTNAME} -d ${DBNAME} -c "REINDEX INDEX scm_main.unq_vbvdata_vehicle;" if [[ ${?} -eq 0 ]]; then echo "reindex for unq_vbvdata_vehicle finished at: `date "+%F %T"`" &gt;&gt; ${LOG_FILE} else echo "reindex for unq_vbvdata_vehicle failed" &gt;&gt; ${LOG_FILE} …
70 postgresql  index  psql 

6
sql-serverでコミットスナップショットの読み取りを有効にした場合、どのようなリスクがありますか?
ここでは、行ごとにいくつかの追加データが保存されるため、パフォーマンスの低下が見られる可能性があることを読みましたが、他にどのようなリスクがありますか? 例えば。これはデータベースの回復に影響しますか?これを利用するために私たちがしなければならないことは他にありますか? これらのコマンドを実行する予定です。 ALTER DATABASE DatabaseName SET READ_COMMITTED_SNAPSHOT ON ALTER DATABASE DatabaseName SET ALLOW_SNAPSHOT_ISOLATION ON これにより、1つのトランザクションが他のトランザクションを更新している場合でも古いデータを読み取ることができるオラクルに近いものが得られると思います。これは正しいです? SQL Server 2005のロックの問題にうんざりしているので、これを検討しています。これにより、ユーザーが時折発生するデッドロックを減らし、アプリケーションの全体的なパフォーマンスを向上させ、恐れ。


5
json配列をpostgres配列に変換する方法は?
次のようなドキュメントdataを保持する列がありますjson。 { "name": "foo", "tags": ["foo", "bar"] } ネストされたtags配列を連結文字列(foo, bar)に変換したいと思います。それはarray_to_string()理論上の関数で簡単に可能になります。ただし、この関数はjson配列には作用しません。だから私はこのjson配列をPostgres に変える方法を疑問に思いますarrayか?

10
ID列に「Id」という名前を使用しないことを推奨するのはなぜですか?
IdテーブルのID列に名前を使用しないように教えられましたが、最近は、データが実際に何であるかについて簡単で、短く、非常に説明的であるため、とにかくそれを使用しています。 Idテーブル名の接頭辞を付けることを提案する人がいますが、これは特にSQLクエリを作成する人(またはEntity FrameworkのようなORMを使用している場合はプログラマー)、特にCustomerProductIdまたはAgencyGroupAssignementId Ident使用を回避するために、実際にすべてのID列に名前を付けて何かを作成するために雇ったサードパーティベンダーId。最初Idはキーワードだったからだと思っていましたが、調べてみると、IdSQL Server 2005のキーワードではないことがわかりました。 それでは、なぜIdID列に名前を使用しないことを推奨するのでしょうか? 編集:明確にするために、どの命名規則を使用するか、またはある命名規則を他の命名規則よりも使用するための引数を求めていません。IdID列名に使用しないことが推奨される理由を知りたいだけです。 私はDBAではなく、単一のプログラマーです。データベースは、データを保存する場所にすぎません。私は通常小さなアプリを作成し、通常はデータアクセスにORMを使用するため、IDフィールドの共通フィールド名を使用する方がはるかに簡単です。これを行うことで何が欠けているのか、そしてこれを行わない本当に良い理由があるかどうかを知りたいです。

2
1つの大きなクエリまたは複数の小さなクエリの高速化とは何ですか?
私はさまざまな企業で働いていますが、一部の企業は、すべての「相対」テーブルを結合するビューを持つことを好むことに気付きました。しかし、その後、アプリケーション上で使用する必要があるのは1列のみです。 それでは、単純な選択を行い、それをシステムコードで「結合」する方が速いでしょうか? システムは、php、java、asp、データベースに接続する任意の言語です。 だから問題は、サーバー側(php、java、asp、ruby、python ...)からデータベースに行く方が速いか、必要なものをすべて取得する1つのクエリを実行するか、サーバー側からデータベースに移動して一度に1つのテーブルから列のみを取得するクエリ?

5
キー値のこのデータベーススキーマの名前はありますか?
慣れていると思われる形式(エンティティごとに1行、属性ごとに1列)からデータベースをリファクタリングしたクライアントからの日常的なデータフィードを処理します。 変更前:属性ごとに1列 ID Ht_cm wt_kg Age_yr ... 1 190 82 43 ... 2 170 60 22 ... 3 205 90 51 ... 後:すべての属性に1つの列 ID Metric Value 1 Ht_cm 190 1 Wt_kg 82 1 Age_yr 43 1 ... 2 Ht_cm 170 2 Wt_kg 60 2 Age_yr 22 2 ... 3 Ht_cm …

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