CyberChaos(さいばかおす)

プログラミング言語、トランスパイラ、RPA、ChatGPT、データマイニング、リバースエンジニアリングのための忘備録

SQL から MongoDB へのコンバータ

2024-07-28 17:47:14 | SQL

MongoDBよ許したるわwww

MongoDBのクエリ文を覚えるのがあまりにも苦痛なんで、何とかならないか?と思ってググったらこんな便利なものが出てきた。


例えば、
select id,salary from employee where age >= 35 and (designation = 'manager' or (lastname = 'johnson' and firstname like '%john%'))

を変換すると・・・
db.employee.find({

"$and": [{
"age ":{ "$gte" : 35 }
},{
"$or": [{
"designation " : 'manager'
},{
"$and": [{
"lastname " : 'johnson'
},{ " firstname " : '%john%'
}]
}]
}]
},{
"id": 1,
"salary": 1
}
);

となる。

前の記事でMongoDBのネガキャンをテメエでしといて何だが、手軽にオモチャみたいに試せるDBとして再考の余地はあると思う。



わざと負荷をかけたり、インスタンスを幾つも立ち上げたりして消えても構わないようなサンプルデータで楽しく遊びながら勉強するのも一興だし、セキュリティについて本気で対策を考えてみるのも良いし。

オ・マ・ケwww



もう二度と、絶対にMongoDBを使うべきじゃない理由

2024-07-28 16:40:44 | SQL
もう二度と、絶対にMongoDBを使うべきじゃない理由
  • …データを無くす
  • …実際、長期間、デフォルトでエラーを無視し続け、何があってもすべての単一書き込みが成功したとみなした( 32ビットのシステムで3GBかそこらを使用したら、MongoDBの制限によって何の警告もなしに全データを失うことになった)。
  • …宣伝していたユースケースでですら遅く、これが早いと主張するには完全に証拠に欠けている
  • …セキュリティの問題になるくらい、応答時間が酷く遅い。求めてきた人全員に認証なしで全データをさらしてしまうという危険なデフォルト設定をパッチするのに 2年かかった
  • …拡張やメンテナンスをするのが大変すぎる。
  • …MongoDBが得意とするところは何もなくて、あるのは明らかに不得意なことばかりだ
  • 俺様の意見だが、クエリ文がJSON形式というのが一番良くない!!!何で標準SQLじゃないんだ?ふざけんな!使い辛いんだよ!せっかく覚えた標準SQLが無駄になるだろーが!
  • その②:俺様の意見だが、確かに接続を求めていた者全員に対して認証無しで全データを晒してしまうのは最悪だわなwww OracleDBもSQL serverもMySQLもDBに接続するのが難関で、結局接続できなかったからな。

  • CockroachDBをWindowsにインストールする方法その2

    2024-07-17 21:39:59 | SQL
    copilotの提示した方法ではCドライブにインストールしても何の反応もなかったので、ChatGPTに訊いてみた。

    CockroachDBをWindows 10にインストールする方法を説明します。DockerやUbuntuを使用せず、直接Windows上にインストールする手順です。

    手順
    バイナリのダウンロード

    CockroachDBの公式サイトからWindows用のバイナリをダウンロードします。
    公式サイト: CockroachDB Downloads
    解凍

    ダウンロードしたZIPファイルを任意の場所に解凍します。例えば、C:cockroachdbに解凍するなどします。
    環境変数の設定

    CockroachDBの実行に必要な環境変数を設定します。

    COCKROACH_BINARY_DIR: 解凍したバイナリのディレクトリへのパス (C:cockroachdb など)
    PATH: CockroachDBバイナリが含まれているディレクトリを追加します。
    環境変数の設定方法:

    コントロールパネルを開き、システム > 詳細設定 > 環境変数 を選択します。

    ユーザー環境変数またはシステム環境変数のどちらかに新しい変数を作成します。

    例:

    変数名: COCKROACH_BINARY_DIR

    変数値: C:cockroachdb

    変数名: PATH

    変数値: %COCKROACH_BINARY_DIR%

    CockroachDBの初期化

    コマンドプロンプトを管理者として起動します。

    CockroachDBの初期化を行います。以下のコマンドを実行します:

    cockroach init --insecure --host=localhost

    CockroachDBの起動

    CockroachDBを起動します。コマンドプロンプトで以下を実行します:

    cockroach start --insecure --host=localhost

    SQLクライアントの起動

    別のコマンドプロンプトを開き、SQLクライアントを起動します:

    cockroach sql --insecure --host=localhost --port=26257

    やってみたら反応があった。ポート番号26257には接続できないというエラーが出た。

    他のポート番号で接続できるかどうか試してみるしかないようだ。

    ※おまけ。
    CockroachDBに接続できない場合、いくつかの可能性が考えられます。以下の手順を試して、問題の特定と解決を試みてください。

    接続できない場合の解決方法
    CockroachDBの起動状態を確認する

    CockroachDBが正しく起動していることを確認します。以下のコマンドで再度起動を試みます:

    bash
    コードをコピーする
    cockroach start --insecure --host=localhost
    コマンドプロンプトに起動に関するエラーが表示されていないか確認します。

    正しいポート番号を使用しているか確認する

    CockroachDBのデフォルトのポート番号は26257です。SQLクライアントを起動する際にポート番号を指定していることを確認します:

    bash
    コードをコピーする
    cockroach sql --insecure --host=localhost --port=26257
    もしポート番号を変更している場合は、そのポート番号を使用して接続を試みます。

    ファイアウォールまたはセキュリティソフトの設定を確認する

    Windowsのファイアウォールや、インストールしているセキュリティソフトがCockroachDBへの接続をブロックしていないか確認します。
    必要に応じて、ポート26257(CockroachDBのデフォルトポート)を許可する設定を行います。
    環境変数の設定を確認する

    COCKROACH_BINARY_DIR および PATH 環境変数が正しく設定されているか再度確認します。
    特に PATH 環境変数が正しく設定されていることを確認し、CockroachDBのバイナリが含まれているディレクトリが通常のコマンドプロンプトからアクセスできるようになっているか確認します。
    ネットワーク接続を確認する

    ネットワークの問題が原因で接続できない場合があります。ローカルホスト(localhost)であれば問題ないはずですが、必要に応じてネットワークの設定を確認します。
    ログファイルを確認する

    CockroachDBのログファイルを確認し、エラーメッセージや警告を探します。デフォルトでは、CockroachDBの起動ディレクトリ内に cockroach-data/logs ディレクトリがあります。
    再起動を試す

    CockroachDBを再起動して、問題が解決するか試してみます。
    以上の手順を順に試してみて、接続できるようになるかどうか確認してください。問題が解決しない場合は、具体的なエラーメッセージや状況をお知らせいただければ、さらにアシストします。


    cockroachdbに接続する方法
    ChatGPT
    CockroachDBに接続する方法について詳しく説明します。

    CockroachDBに接続する手順
    CockroachDBの起動

    CockroachDBを起動します。通常はコマンドプロンプト(またはターミナル)を開き、以下のコマンドを実行します:

    bash
    コードをコピーする
    cockroach start --insecure --host=localhost --port=26257
    --insecure: セキュリティ機能を無効化して起動します。開発やテスト目的でのみ推奨されます。
    --host=localhost: CockroachDBがローカルホスト(自分のコンピュータ)でのみ動作するよう指定します。
    --port=26257: CockroachDBのデフォルトポート番号です。ポート番号を変更している場合は、そのポート番号を指定します。
    SQLクライアントを使用して接続

    別のコマンドプロンプト(またはターミナル)を開き、以下のコマンドを使用してSQLクライアントに接続します:

    bash
    コードをコピーする
    cockroach sql --insecure --host=localhost --port=26257
    --insecure: セキュリティ機能を無効化して接続します。開発やテスト目的でのみ推奨されます。
    --host=localhost: CockroachDBが動作しているホストを指定します。ここではローカルホストを指定しています。
    --port=26257: CockroachDBのデフォルトポート番号です。ポート番号を変更している場合は、そのポート番号を指定します。
    SQLクエリの実行

    SQLクライアントに接続したら、SQLクエリを実行できます。例えば、以下のようにテスト用のデータベース(bankという名前)を作成してみます:

    sql
    コードをコピーする
    CREATE DATABASE bank;
    USE bank;
    これでbankという名前のデータベースが作成され、それを使用するように設定されます。

    SQLコマンドの実行

    さまざまなSQLコマンドを実行できます。例えば、テーブルを作成してデータを挿入するなどの操作が可能です:

    sql
    コードをコピーする
    CREATE TABLE accounts (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    name STRING,
    balance DECIMAL
    );

    INSERT INTO accounts (name, balance) VALUES ('Alice', 1000.00);
    INSERT INTO accounts (name, balance) VALUES ('Bob', 2500.00);

    SELECT * FROM accounts;
    上記の例では、accountsというテーブルを作成し、データを挿入して、最後にそのデータを取得するSELECT文を実行しています。

    接続の終了

    SQLクライアントから終了するには、以下のコマンドを入力します:

    sql
    コードをコピーする
    q
    これにより、SQLクライアントからログアウトしてコマンドプロンプトに戻ります。

    注意点
    --insecure オプションはセキュリティを犠牲にしていますので、本番環境での使用は推奨されません。本番環境では適切なセキュリティ設定を行ってください。
    CockroachDBは分散型データベースですが、上記の手順では単一ノードでの操作を想定しています。クラスタを構成する場合や、セキュリティを強化する場合は公式ドキュメントを参照してください。
    これで、CockroachDBに接続してSQLクエリを実行する方法がわかりました。


    どのポート番号に接続できるか調べる方法は?
    ChatGPT
    特定のポート番号に接続できるかどうかを調べる方法はいくつかあります。以下にいくつかの方法を紹介します。

    方法1: Telnetを使用する方法
    コマンドプロンプトを開く

    Windowsの場合、スタートメニューから「コマンド プロンプト」を検索して開きます。
    Telnetコマンドを実行

    Telnetコマンドを使用して、特定のポートに接続を試みます。例えば、CockroachDBのデフォルトポートである26257に接続を試みる場合は、以下のようにコマンドを入力します:

    bash
    コードをコピーする
    telnet localhost 26257
    このコマンドを実行すると、Telnetが指定したポートに接続しようとします。接続が成功すると画面に何かしらの応答が表示されます。接続が拒否される場合は、ポートが閉じているか、ファイアウォールによってブロックされている可能性があります。

    Telnetの利用終了

    接続のテストが終了したら、Telnetウィンドウを閉じるか、コマンドプロンプトで Ctrl+] を押して quit と入力して終了します。
    方法2: PowerShellを使用する方法
    PowerShellを開く

    Windowsの場合、スタートメニューから「PowerShell」を検索して開きます。
    Test-NetConnectionコマンドを使用

    PowerShellの Test-NetConnection コマンドを使用してポート接続をテストします。例えば、ポート26257に接続を試みる場合は、以下のようにコマンドを入力します:

    bash
    コードをコピーする
    Test-NetConnection -ComputerName localhost -Port 26257
    このコマンドを実行すると、指定したポートに接続できるかどうかが確認されます。接続が成功すると、TcpTestSucceeded が True と表示されます。接続が失敗する場合は、詳細なエラーメッセージが表示されることがあります。

    方法3: ネットワーク監視ツールを使用する方法
    ネットワーク監視ツールのインストール

    ネットワーク監視ツール(例: Wireshark、TCPingなど)をインストールします。
    ツールを使用してポート接続をテスト

    インストールしたツールを使用して、特定のポートに接続できるかどうかをテストします。
    ツールの使用方法はツールによって異なるため、それぞれのドキュメントやヘルプを参照してください。
    方法4: ポートスキャナーを使用する方法
    ポートスキャナーのインストール

    ポートスキャナー(例: Nmap、Advanced Port Scannerなど)をインストールします。
    ポートスキャナーを使用してポートをスキャン

    インストールしたポートスキャナーを使用して、特定のポートをスキャンし、そのポートが開いているか閉じているかを確認します。
    ポートスキャナーの使用方法はツールによって異なるため、それぞれのドキュメントやヘルプを参照してください。
    これらの方法を使用して、特定のポート番号に接続できるかどうかを確認することができます。特にデータベースやサーバーの接続テストなど、ITシステムのデバッグやトラブルシューティングに役立ちます。

    大人しく諦めてDockerやUbuntuに行くしかないのか?MySQLの時も、Microsoft SQL severの時も、OracleDBの時もみ〜んなDBの接続でコケてるんだよ。いきなりIDとパスワードの入力を求められたり。

    CockroachDBをWindowsにインストールする方法

    2024-07-17 05:54:22 | SQL
    cockroachDBをDockerやUbuntuを使わずにWindows10にインストールする方法を今回はChatGPTじゃなくてCopilotに訊いてみた。


    ゴキのロゴまで付けてやがるwww


    Windows 10にCockroachDBをインストールするには、以下の手順に従ってください。

    CockroachDBのダウンロード:
    公式サイトからWindows用のCockroachDBバイナリをダウンロードします。
    バイナリの展開:
    ダウンロードしたZIPファイルを展開し、cockroach.exeを任意のディレクトリに配置します。例えば、C:cockroachdbに配置します。

    ※じゃあUSBストレージをEドライブとしてE:cockroachdbというディレクトリを作って配置したらどうなるのかね?

    環境変数の設定:
    cockroach.exeがどのディレクトリからでも実行できるように、環境変数にパスを追加します。
    Windowsキー + Rを押して「ファイル名を指定して実行」ダイアログを開き、sysdm.cplと入力して「OK」をクリックします。
    「システムのプロパティ」ウィンドウで「詳細設定」タブを選択し、「環境変数」をクリックします。
    「システム環境変数」セクションで「Path」を選択し、「編集」をクリックします。
    「新規」をクリックし、C:cockroachdbを追加します。
    「OK」をクリックしてすべてのダイアログを閉じます。
    CockroachDBの起動:
    コマンドプロンプトを開き、以下のコマンドを実行してCockroachDBを起動します。
    cockroach start-single-node --insecure

    --insecureオプションは開発環境でのみ使用してください。本番環境ではセキュリティ設定を行う必要があります。
    CockroachDBの初期化:
    別のコマンドプロンプトを開き、以下のコマンドを実行してデータベースを初期化します。
    cockroach sql --insecure --execute="CREATE DATABASE mydatabase;"

    これで、Windows 10上でCockroachDBを使用する準備が整いました。何か他にお手伝いできることがあれば教えてくださいね!

    いわゆるパスを通すという作業についても有耶無耶にして誤魔化さず、ちゃんと回答している。
    本当かどうかはやってみないと知らんけど。

    これでうまく行けば、USBストレージを持ち歩いて会社のPCでパスを通せば使えるようになるはずだ。DockerとかUbuntuみたいなバカデカイもんをダウンロードしたりインストールしたり、その他面倒で時間の無駄となるような手間も省ける。

    CockroachDB本のAI翻訳2

    2024-06-23 19:23:00 | SQL
    【表紙の裏の次のページ】
    CockroachDB
    ランニングコストが安い。 操作が簡単。 殺すことは不可能。
    CockroachDBが、グローバル規模でミッションクリティカルなトランザクション・ワークロードをサポートするために、あらゆる業界のマーケットリーダーから信頼されているのも不思議ではありません。
    オペレーションコストの削減。 成長に向けた再集中。 データベース運用の自動化と
    ビジネスの継続性を維持します。 エンジニアリングチームを解放し、新機能を出荷して成長を促します。
    楽に規模を拡大する。 柔軟性を保つ。
    クラウドや地理的な制約を超えた単一の論理データベースで、どこでも簡単に実行できます。

    回転するものは...下がらない
    データベースのダウンタイムは譲れない CockroachDBの分散アーキテクチャは、高速で完璧な、中断のないアプリ体験を提供することができます。
    現在、同社の企業顧客には、世界最大級の銀行2行やフィンテック破壊企業であるNubank、メディア大手のetfixやComcast、世界最大級のテクノロジー企業4社や技術革新企業であるFortinet LaunchDarklyやRubrik、世界トップ5の自動車メーカー2社など、各業界をリードする企業やイノベーターが名を連ねている。
    また、顧客はここ数年、CockroachDBを倍増利用し続けており、ビジネス全体で年平均139%の増加を記録しています。

    CockroachDB本のAI翻訳1

    2024-06-23 19:15:12 | SQL
    【表紙の裏書】
    O'Reilly
    CockroachDB:決定版ガイド
     今日のデータ駆動型クラウドアプリケーションの要求に対応するために構築された分散SOLデータベースであるCockroachDBの概要を知ることができます。
     このハンズオン・ガイドでは、ソフトウェア開発者、アーキテクト、およびDevOps/SREチームが、Cockroach DBを使用して、破壊不能でありながら弾力的に拡張し、エンド・ユーザーにシームレスな配信を提供するアプリケーションを作成する方法を学ぶ。
     また、既存のアプリケーションをCockroach DBの高性能なクラウド・ネイティブ・データ・アーキテクチャに移行する方法も学びます。
     分散システムに慣れ親しんでいる方であれば、グローバルに分散したエンドユーザーに超低レイテンシーを提供するための最適化だけでなく、強力なデータの正しさと一貫性の保証の利点をすぐに発見できるでしょう。

    その方法を学ぶのだ:

    -データモデリングとスキーマ設計を含む、分散インフラ向けのアプリケーションの設計と構築

    -CockroachDBへのデータ移行

    - 分散されたインフラストラクチャ上でデータを読み書きし、ACIDトランザクションを実行する。

    -単一リージョンと複数リージョンのダスターにまたがる弾力性のあるCockroachDBの展開を計画する。

    -CockroachDBデプロイの安全性、監視、最適化
    Guy Harrisonは、データベースの設計、開発、管理、最適化において数十年の経験を持つソフトウェアのプロフェッショナルです。
    Cockroach Labsの教育担当副社長Jesse Seldessは、CochsoachDBのドキュメンテーションとトレーニングチームを率いている。
    また、Cockroach Labsの共同設立者兼チーフアーキテクトであるBen Darnellは、CockroachDBのトランザクションモデルを支えるGistributedコンセンサスプロトコルを構築した。

    "DoorDashは、CockroachDBを使用して、アプリケーションを書き直すことなく、小規模なインデックスやスキーマの変更だけで、多数のワークロードをフォークリフトを用いたように移行し、スケールすることができた。
    " CockroachDBを使用してスケーラブルなアプリケーションを構築し、実行しようとしているエンジニアは、この本を読むとよいだろう。 -ショーン・チッテンデン・コア・イニラストラクチャー。 DoorDash

    「分散SQLシステムは、リレーショナル・モデル、強力な一貫性保証、そして弾力的なスケーラビリティという、過去50年間のデータベースの最高のアイデアを結集している。 この三位一体こそ、現代のアプリケーションがゲームに打ち勝つために必要なものだ。
    -アンディ・パビロ Databaseology Carnegie Mellon University 准教授

    Oracle RACとCockroachDBどちらが良いかChatGPTに訊いてみた

    2024-06-23 17:49:07 | SQL
    Oracle RACとCockroachDBどちらが良いか?

    Oracle RAC(Real Application Clusters)とCockroachDBのどちらが良いかは、使用する目的や要件によって異なります。それぞれの特性を以下にまとめます。

    Oracle RAC

    特長:

    1. 高可用性とスケーラビリティ: 複数のノードでデータベースをクラスター化し、障害が発生してもシステムが継続的に稼働できます。
    2. ACIDトランザクション: データの一貫性と整合性を強く保証します。
    3. 強力なサポート: エンタープライズ向けのサポートと多機能な管理ツールが提供されます。
    4. 実績: 多くの大企業での導入実績があり、信頼性が高いです。

    適用シナリオ:

    • 大規模なエンタープライズシステムでの利用。
    • 高い可用性とデータ整合性が必要な金融システムやミッションクリティカルなアプリケーション。

    CockroachDB

    特長:

    1. 分散型データベース: グローバルに分散したクラスタで動作し、スケールアウトが容易です。
    2. 自動シャーディングとリバランシング: データの自動分散と再配置が可能で、管理が簡便です。
    3. 高可用性と耐障害性: ノード障害に対して自動的にフェイルオーバーし、継続的に利用可能です。
    4. ACIDトランザクション: 強い一貫性を持つトランザクションを提供。

    適用シナリオ:

    • グローバルに分散したシステムでの利用。
    • クラウドネイティブアプリケーションやスケールアウトが求められるモダンなシステム。

    結論

    • 高可用性とトランザクションの整合性を求めるエンタープライズ環には、Oracle RACが適しています。
    • スケールアウト性能とグローバル分散を重視するクラウドネイティブな環境には、CockroachDBが向いています。

    具体的なシステム要件や予算、既存のインフラストラクチャとの親和性を考慮して選択することが重要です。

    俺は耐障害に関してはCockroachDBが良い、セキュリティに関してはOracle RACが良いと思った。

    気持ちはCockroachDBに完全に傾いている。やはり、オープンソースで無料であることが大きい。


    CockroachDBでセキュアなクラスタをDocker Composeで作る

    2024-06-22 22:20:40 | SQL

    OracleDBは最高レベルのセキュリティを誇る商用RDBだ。

    CockroachDBは果たしてどうだろうか?
    と思ってググってみたら上記の記事が出てきた。

    セキュリティに関しても一応考慮しているようだ。

    銀行などで使われるようなRDBのセキュリティがザルだったらお話にならない。簡単に突破されて口座の残高を改ざんされてしまうだろう。

    SQL クエリ形式をNoSQL (MongoDB) クエリ形式に変換する無料ツール

    2024-06-16 08:32:00 | SQL

    試しに

    CREATE TABLE customer (name VARCHAR(20) NOT NULL, route VARCHAR(50) NOT NULL, save_date DATE NOT NULL, price INTEGER NOT NULL, PRIMARY KEY (name));

    をMongoDBへ変換してみた。

    db.ATETABLE customer (name VARCHAR(20) NOT NULL, route VARCHAR(50) NOT NULL, save_date DATE NOT NULL, price INTEGER NOT NULL, PRIMARY KEY (name)).find({
    },{
    "": 1
    }
    );

    SQLとMongoDBは似ている部分があるが、やはりMongoDBも覚えていちいち頭の中で変換しながら書き換えるのは面倒くさい。

    こんなツールやWebアプリがあったら便利だなと思った。
    本当はMongoDBに直接そのままSQL文を打ち込んで動かしたかったのだが。

    まあ後々自分で勉強しながらアプリでも作ろうかな?

    Oracle Databaseを無償で使う方法いろいろ

    2024-06-15 23:24:24 | SQL

    Oracle DBは買うとめちゃくちゃ高いけど、勉強のために無料で利用できる方法もあるらしい。

    RDBMSを使うなら最もユーザーが多いOracleDBから。
    SQLの勉強するのもやはりOracleDBから。

    OracleDBでSQLが書けるようになってから他のRDBMSを使うべきだが、俺はもうcockroachDBでSQLを書きたくなった!
    サンプルテーブルを作成し、サンプルレコードを挿入してみたくなった。

    問題は環境構築。

    無限に拡張可能な決済システムを構築する方法(例付き)

    2024-06-10 01:56:09 | SQL

    How to build a Scalable Payments System (Reference Architecture with diagrams)

    How to build a Scalable Payments System (Reference Architecture with diagrams)

    Everybody, from banking applications to retailers to SaaS applications, deals with payment processing. But architecting a system that can deal with payments at s...

    Cockroach Labs社から送られてきたメルマガから。
    今までウザいと思って捨てていたメルマガだが、こんなに充実した内容だったとは驚き。

    資金があれば、Cockroach Labs社の日本支社を立ち上げてプロモーションをかけたいくらいなのだが。

    無限に拡張可能な決済システムを構築する方法(例付き)

    MySQL 静的関数「グローバル一意識別子」の取得

    2024-06-08 21:08:00 | SQL
    で試してみた。

    SELECT CURRENT_USER,
    CURRENT_DATE,
    CURRENT_TIMESTAMP,
    VERSION(),
    RAND(),
    UUID()

    以下が結果

    CURRENT_USERCURRENT_DATECURRENT_TIMESTAMPVERSION()RAND()UUID()
    LA06108564@172.19.0.0/255.255.0.02024-06-082024-06-08 20:59:225.6.51-log0.422934614515802448b22f01b-258e-11ef-a77f-0242c0a82c6f

    SQL HACKSをパッと開いたら242ページが出て、そこに上記のコードが載っていたので試してみた。





    こんな情報が出てしまったらセキュリティはザルなんじゃないのか?と素人ながら思ってしまった。

    ちなみにSQL Server、Oracle、PostgreSQLそれぞれの書き方も載っている。

    【追伸】
    docoqlでグローバル一意識別子文を試してみたらやはりwww