tetsu040eのブックマーク (1,010)

  • MySQL8.0では、地理座標の扱いに互換性が無い|moli9ma

    mysql5.7でgeometryを試してみましたが、8.0では同じようにやっても動作しませんでした。 例えば、以下のようなクエリを実行すると、mysql5.7では問題ありませんが8.0ではエラーになってしまい、Latitudeの範囲は、-90.0000000から90.000000だよ?ってメッセージが出力されます。 mysql> SELECT VERSION(); +-----------+ | VERSION() | +-----------+ | 5.7.29 | +-----------+ 1 row in set (0.00 sec) mysql> SELECT ST_AsText(ST_GeomFromText('POINT(102.1893310546875 3.880696482497261)', 4326)); +-----------------------------

    MySQL8.0では、地理座標の扱いに互換性が無い|moli9ma
    tetsu040e
    tetsu040e 2022/10/12
  • Postgresqlのシーケンスを再設定する:地方で活動するweb制作者の日々を綴るblog

    2014年02月07日11:28 カテゴリpostgresql Postgresqlのシーケンスを再設定する postgresqlのシーケンス値は、mysqlと違って指定カラムの最大値を取ってくれるのではなく、別に保存してある「最大値」を設定するようになっている。 SQLでinsertして行く分には基問題ないけれど、CSVなどからインポートした場合、保存した値とずれてしまい、SQLからのinsert時に "duplicate key value violates unique constraint" などと怒られてしまうことがある。 これ再設定するには select setval('hogehoge_id_seq',(select max(id) from hogehoge)); みたいな感じにする。 後半のselect分はテーブルのidの最大値を取る、と言うことで、この部分を直接数字を

    Postgresqlのシーケンスを再設定する:地方で活動するweb制作者の日々を綴るblog
    tetsu040e
    tetsu040e 2022/10/03
  • シェルスクリプトでpsql使用時にパスワードを聞かれないようにする。 - Qiita

    シェルスクリプトでpsql使用時にパスワードを聞かれないようにする。 PGPASSWORDをエクスポートする。 export PGPASSWORD=postgres psql -U postgres dbname -c "select * from tbl;" ユーザ名とデータベース名をエクスポートするときは以下。 export PGDATABASE=dbname export PGUSER=postgres

    シェルスクリプトでpsql使用時にパスワードを聞かれないようにする。 - Qiita
    tetsu040e
    tetsu040e 2022/09/30
  • RailsでPostgreSQLのRow Level Security Policyを使ったマルチテナント

    Clipkit(クリップキット) というSaaSを作っています。マルチスキーマ方式のマルチテナントシステムなのですが、テナント数が1,000近くなってきて辛さも出てきているので他の方式を検証中です。 LD;TR PostgreSQLのRow Level Security Policyを利用したマルチテナントの実装を試してみました。 問題なく実装できてうまく動きそうでした。が、結局今回は採用を見送りました。RDBのマルチテナントの手法は一長一短で難しい。 個人的には最初はRLSではなくマルチスキーマ方式で始めれば良いのではないかと思いました。 はじめに SaaS型のWebサービスでは、顧客ごとの独立したアプリケーションを、1つのシステムに同居させる方式があります。これをマルチテナントといいます。 RDBのマルチテナント方式 まず普通に考えると、テーブルに複数のテナントのデータを混在させる設計

    RailsでPostgreSQLのRow Level Security Policyを使ったマルチテナント
    tetsu040e
    tetsu040e 2022/09/27
  • pg_bigmで全文検索する|PostgreSQLインサイド

    PostgreSQLの周辺ツールの1つであるpg_bigmを使って、全文検索する方法について解説します。 1. pg_bigmとは pg_bigm(ピージーバイグラム)は、SQL文で全文検索を使用できるツールです。このツールは、2-gram(バイグラム)と呼ばれる方法で、文字列から全文検索用のインデックスを作成します。このインデックスを使って、ユーザーは高速に文字列検索を実行できます。 PostgreSQLには、pg_trgm(ピージートライグラム)という全文検索モジュールがcontribに付属されていますが、pg_trgmは日語のようなマルチバイト文字列の検索には適していません。そこで、マルチバイト文字列を扱う全文検索用の周辺オープンソースソフトウェアとして、pg_trgmをベースに開発されたのがpg_bigmです。pg_trgmとpg_bigmの違いを簡単にまとめます。 表1. pg

    pg_bigmで全文検索する|PostgreSQLインサイド
    tetsu040e
    tetsu040e 2022/09/26
  • Row Level Security による素朴なマルチテナント実装 | La Verda Luno

    引き続き(しばらくは) SaaS 開発をやっていくことになったので、フロントエンドエンジニアではあるが SaaS バックエンドについても知見を持っておこうとしている。前々からの懸念・課題としてマルチテナントの DB をどう安全に実現するかというものがあったため、それを調べることにした。 この記事では、あくまで具体的な動く例を元に解説を加えているだけなので、軽く知りたい方や実例・ストーリーを求める方は記事最後の参照記事を見るだけで十分かもしれない。 ソースはこちらから。 背景 SaaS アプリケーションでは、金銭的なコストやマイグレーションのコスト削減のために DB もテナントで共用する構成(以下、マルチテナント構成)が求められる。 これは一つのリソースユニットですべてのリクエストを捌くという意味でなく、テナント専用の割り当てがないリソースユニットでテナントを選ばず捌くということ。スケールア

    Row Level Security による素朴なマルチテナント実装 | La Verda Luno
    tetsu040e
    tetsu040e 2022/09/16
  • マルチテナントSaaSのテナント分離をRow-Level Securityに移行した - Sansan Tech Blog

    こんにちは、クラウド請求書受領サービス「Bill One」の開発に携わっているソフトウェアエンジニアの加藤です。Bill OneはB2BのマルチテナントSaaSであり、データベースとして Cloud SQL 上のPostgreSQLを利用しています。従来はマルチテナントのデータを分離するために、テナントごとにPostgreSQLのスキーマを分けていましたが、2020年12月にRow-Level Securty(行レベルセキュリティ。以降RLSと表記)による分離に移行しました。 稿では、移行の背景とRLS組み込みにあたって考慮したポイントをご紹介します。 マルチテナントSaaSのテナント分離 マルチテナントSaaSにおけるテナント分離方法はいくつか知られており、大きく次の3つに分けられます。 アプリケーションの実行環境ごと完全に分離する データベースのみをインスタンスやスキーマで分離する

    マルチテナントSaaSのテナント分離をRow-Level Securityに移行した - Sansan Tech Blog
    tetsu040e
    tetsu040e 2022/09/15
  • マルチテナント SaaS を設計する際に参考になった資料 - Qiita

    弊社 LIGHTz 初のアドベントカレンダー1発目でございます 弊社、絶賛 SaaS システムの開発中で、度々設計が議論になります。 そこで、備忘録も兼ねて参考になった資料を一言添えて挙げていきます。 ....... 一発目なのに備忘録の投稿をお許しください これから SaaS を作る皆様、↓もおすすめです。 リソースと分離編 マルチテナントSaaSのテナント分離をRow-Level Securityに移行した - Sansan Builders Blog 分離に関して各社の奮闘と生きた事例を見ることができます https://mitomasan.hatenablog.com/entry/2016/05/25/210151 あまり他の記事ではあまり言及されていない観点について述べられています url(ドメイン)設計 DBの接続先の切り替えはユーザーのリクエストを処理する最初の段階でフレーム

    マルチテナント SaaS を設計する際に参考になった資料 - Qiita
    tetsu040e
    tetsu040e 2022/09/15
  • 世界一わかりやすい FULLTEXT INDEX の説明と気を付けるべきポイント

    FULLTEXT INDEX とは インデックス(索引)は、データベースの性能を向上させる方法の一つです。 しかし、通常のIndex では text ベースのカラム(CHAR型、VARCHAR型、TEXT型) から特定の文字列を検索する全文検索には向いていません。 それは、通常のIndex はカラムの値の一部ではなく、値全体に対する検索に最適化されているからです。 そのため、全文検索 (カラムの値の一部が一致している結果を取得) するには、別のインデックス FULLTEXT INDEX が必要です。 MySQL で FULLTEXT INDEX を利用するには MATCH 関数(*1)を利用する必要があります。 通常の LIKE 検索では、FULLTEXTIndex が利用されないため、速度的に不利です。(*2) (*1 DBMSによって様々、MS SQL では CONTAIN 関数を利用

    世界一わかりやすい FULLTEXT INDEX の説明と気を付けるべきポイント
    tetsu040e
    tetsu040e 2022/09/01
  • pt-query-digestを使用したクエリログの変換について

    Percona Toolkitに含まれるpt-query-digestをスロークエリのレポーティングに使用している方は多いと思いますが、pt-query-digestは様々なクエリソースを受け取り、様々なフォーマットに変換できることをご存知でしょうか。 今回は、pt-query-digestを使用して、様々なクエリソースをスロークエリログ形式に変換する方法をご紹介します。 pt-query-digestが対応するクエリソースの形式 pt-query-digestは以下のクエリログ形式に対応しています。 slowlog | スロークエリログ genlog | 一般ログ binlog | バイナリログ tcpdump | tcpdump rawlog | テキストログ –processlist | SHOW PROCESSLIST 入力するクエリログの形式は、 --processlistを除き

    pt-query-digestを使用したクエリログの変換について
    tetsu040e
    tetsu040e 2022/08/31
  • JSON, CSV, Excel, Parquet 等の様々なデータ形式に SQL クエリを実行できる dsq コマンドが便利。 - 全力で怠けたい

    はじめに 対応しているデータ形式 類似のツールとの比較 バージョン インストール方法 基的な使い方 ファイルに対して SQL クエリを実行する 標準入力に対して SQL クエリを実行する クエリ結果を整形する 複数のファイルに対して SQL クエリを実行する 複数のファイルを JOIN する データ形式が異なるファイルを JOIN する 任意のデータ形式から JSON ヘの変換 オブジェクト内にネストしている配列に SQL クエリを実行する ネストしているオブジェクトから値を取得する ネストしている配列から値を取得する 正規表現のサポート その他 カラムの出力順 スキーマの推測 入力ファイルのキャッシュ REPL CSV と TSV ファイル内の数値の変換 参考サイト JSON, CSV, Excel, Parquet 等の様々なデータ形式に SQL クエリを実行できる dsq コマンド

    JSON, CSV, Excel, Parquet 等の様々なデータ形式に SQL クエリを実行できる dsq コマンドが便利。 - 全力で怠けたい
    tetsu040e
    tetsu040e 2022/08/31
  • Echo で net/http/pprof をマウントする - Qiita

    echo は DefaultServeMux を使っていないので手動でマウントする必要がある。 echo には echo.WrapHandler や echo.WrapMiddleware という便利なヘルパ関数が用意されてるのでそれを使えばいい。 package main import ( "net/http" "net/http/pprof" "github.com/labstack/echo" ) func main() { e := echo.New() pprofGroup := e.Group("/debug/pprof") pprofGroup.Any("/cmdline", echo.WrapHandler(http.HandlerFunc(pprof.Cmdline))) pprofGroup.Any("/profile", echo.WrapHandler(http.H

    Echo で net/http/pprof をマウントする - Qiita
    tetsu040e
    tetsu040e 2022/08/26
  • pprofについて

    TL;DR pprofについて改めてまとめてみました。 関連パッケージが複数あったりして、初学者が導入しようとすると割とハマるかと思いまして記載しました。 この記事ではGoのWebアプリケーションをpprofでプロファイリングする場合について説明します。 pprofとは Goのプロファイリングツールで添付のようにCPU負荷や処理時間、メモリ使用量などをブラウザで表示してくれます。 Graph表示 Flame Graph表示 Flame Graph表示も存在します。 TOP表示 負荷がかかったfunction, method情報をリスト表示も可能です。 pprofの仕組み client側でpprofの開始・取得コマンドを実行 server側のpprof用のhandlerが実行されてserver側にてプロファイリングを開始 server側にて一定時間経過後(profileの場合はデフォルト30

    pprofについて
    tetsu040e
    tetsu040e 2022/08/26
  • alpの使い方(基本編)

    $ asdf plugin-add alp https://github.com/asdf-community/asdf-alp.git $ asdf install alp <バージョン> $ asdf global alp <バージョン> サポートしているログフォーマット alpは以下のログフォーマットをサポートしています。 LTSV JSON また、解析するログフォーマットを正規表現で記述する機能もあるため、テキストフォーマットであればどのようなフォーマットのログでも解析することができます。 他にも、ログファイルではありませんが pcap ファイルを読み込むこともできます。 設定 alpでアクセスログを集計する前に、集計できるログフォーマットに変更する必要があります。 ドキュメントにログフォーマットごとのApache, Nginx, H2Oの設定例を記載していますのでそちらを参照して

    alpの使い方(基本編)
    tetsu040e
    tetsu040e 2022/08/26
  • RedisのSorted Setsで簡易的な遅延実行Queueを作って迅速にLINE LIVEのPC配信対応をリリースした話

    This post is also available in the following languages. Korean, English みなさんこんにちは、LINE LIVE開発のYappoです。 今回は先日リリースされました一般向けのPC配信機能を実装するときに作った簡易的な遅延実行Queueについて書いていこうと思います。 関連エントリ:LIVE PRESS 公式ブログ - ゲーム実況にもぴったり!LINE LIVEでPC横型ライブ配信を試してみよう 背景 今までのLINE LIVEでの配信方法としては、アプリ上で直接配信する方法と、公式アカウント向けの専用画面(LINE OFFICIAL ACCOUNT MANAGER)とRTMPソフト(もしくは専用機材)を利用してPCからの配信する方法がありました。 この2つの方法は全く違う仕組みで実装されるように見えますが、実は基となる

    RedisのSorted Setsで簡易的な遅延実行Queueを作って迅速にLINE LIVEのPC配信対応をリリースした話
    tetsu040e
    tetsu040e 2022/08/22
  • Amazon OpenSearch Service クラスターのステータスは赤または黄です

    簡潔な説明 OpenSearch Service コンソールの [Monitoring] タブには、クラスター内の最も健全でないインデックスのステータスが表示されます。クラスターステータスが赤色で表示されていても、クラスターがダウンしているわけではありません。このステータスは、少なくとも 1 つのプライマリシャードとそのレプリカがノードに割り当てられていないことを示します。クラスターのステータスが黄色の場合は、すべてのインデックスのプライマリシャードがクラスター内のノードに割り当てられます。ただし、1 つ以上のレプリカシャードはどのノードにも割り当てられません。 **注:**最初に赤いクラスターのステータスを解決するまでは、ドメインを再構成しないでください。赤色のクラスターステータスにあるドメインを再構成しようとすると、「処理中」状態で停止する可能性があります。クラスターが「処理中」状態の

    Amazon OpenSearch Service クラスターのステータスは赤または黄です
    tetsu040e
    tetsu040e 2022/08/15
    “{ "index" : { "number_of_replicas" : 0 } }”
  • Amazon Elasticsearch Service(AES)のシャードの未割り当て(UNASSIGNED)が原因でクラスター状態が黄色になってしまった場合の対応方法 - production.log

    概要 タイトルの通り、ある日突然Amazon Elasticsearch Service(以下AES)のクラスター状態が黄色になってしまいました。 今回はクラスター状態が黄色になった場合の対処方法について、紹介します。 クラスター状態が黄色になってしまった原因 AWSのドキュメントを参考にすると、以下の状態になっているようです。 黄色のクラスター状態は、すべてのインデックスのプライマリシャードがクラスター内のノードに割り当てられ、少なくとも 1 つのインデックスのレプリカシャードは割り当てられていないことを意味します。 docs.aws.amazon.com 問題の特定 まずは、クラスターの状態を確認します。 以下のコマンドを使用して確認します。 $ curl -X GET {エンドポイント}/_cluster/health?pretty=true { "cluster_name" : {

    Amazon Elasticsearch Service(AES)のシャードの未割り当て(UNASSIGNED)が原因でクラスター状態が黄色になってしまった場合の対応方法 - production.log
    tetsu040e
    tetsu040e 2022/08/01
  • 郵便番号APIサービス、ケンオールをリリースしました。 - ケンオールブログ

    Photo by Yu Kato on Unsplash prtimes.jp Webエンジニアの中には、郵便番号を住所に変換する機能を実装したことがある方は少なくないのではないでしょうか。 そして、実装のたびに、以下のようなことを感じた方も多くいるのではないかと思います。 KEN_ALL.CSVの中身を覗いて (ウッ) となった経験 郵便番号データとしてよく利用されるのが、日郵便の「郵便番号データダウンロード」ページよりダウンロードできる KEN_ALL.CSV ですが、このファイルがかなりの曲者で、一見CSVという形式ではあるものの、同じ郵便番号のデータが複数行に渡って収録されているなど、単純に読み込んで利用することが難しいものとなっています。また、地域によっては住所の重要な構成要素となっている部分 (例えば京都市の住所に見られる「通り名」) が、データとして独立した形で収録されてお

    郵便番号APIサービス、ケンオールをリリースしました。 - ケンオールブログ
    tetsu040e
    tetsu040e 2022/07/22
  • 変更があるときだけコミット [GitHub Actions]

    概要 以前書いたこの記事のリライトです。 continue-on-error が使えるようになったので綺麗に書けるようになりました。 コード name: Commit on: pull_request: jobs: commit: runs-on: ubuntu-20.04 timeout-minutes: 5 steps: - run: cat $GITHUB_EVENT_PATH - uses: actions/checkout@v2.4.0 with: ref: ${{ github.head_ref }} - run: ./script.sh - name: Diff id: diff run: | git add -N . git diff --name-only --exit-code continue-on-error: true - name: Commit & Push

    変更があるときだけコミット [GitHub Actions]
    tetsu040e
    tetsu040e 2022/07/19
  • Go+cgoをMacでクロスコンパイル - Qiita

    go-sqlite3 を使った Go のプログラムを Mac でクロスコンパイルして LinuxWindows に持っていくと、次のようなエラーが出て実行できませんでした。 Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub そこで cgo を使った Go のプログラムを Mac でクロスコンパイルして LinuxWindows で実行できるようにした時のメモです。 Linux musl-cross をインストール

    Go+cgoをMacでクロスコンパイル - Qiita
    tetsu040e
    tetsu040e 2022/07/18
    “'-linkmode external -extldflags "-static"'”