[B23] 事例で語る、社会インフラを支えるNonStop SQL ~見えないところで凄いんです~by Tetsuya ShinoharaInsight Technology, Inc.
RDBのレコードに、作成日時や更新日時を自動で入れ込むコードを書いたりすることあると思いますが、それに対する個人的な設計指針です。ここでは、作成日時カラム名をcreated_at、更新日時をupdated_atとして説明します。 tl;dr レコード作成日時や更新日時をRDBのトリガーで埋めるのは便利なのでやると良い ただ、アプリケーションからそれらのカラムを参照することはせず別に定義した方が良い MySQLにおける時刻自動挿入 MySQL5.6.5以降であれば、以下のようにトリガーを設定すれば、レコード挿入時に作成日時と更新日時を、更新時に更新日時を、DATETIME型にも自動で埋めてくれます。いい時代になりました。(MySQLが遅すぎたという話もある) `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_
シンプルだけど難しい「新規登録」のデザイン。 派手さはないけど、地道な工夫の繰り返し。 新規登録まわりで離脱の少ないデザインを勉強したかったので、いくつかアプリをスクショしました。自分用で作成しましたが、誰かの参考になればと思います。 また、まとめ内のコメントは個人的感想です。まだまだ勉強中なので、お気軽にご意見いただけるとうれしいです〜。 パターン一覧 1. 登録必須型 2. 登録先行型 3. 利用先行型 4. メリット先行型 目的別の参考事例 1. 不要な遷移を削る 2. 不要な操作を削る 3. わかりやすく伝える 4. 魅力的に伝える おわりに ・最適な新規登録のタイミング ・注意すべきデザインの視点 ・スクショの保管場所1. 登録必須型ユーザー登録なしではアプリが利用できないパターン。 傾向 母数としては一番多い形式。プロフィールが大切なフィットネス系では、利用前にかなりの入力を求
背景 つい先日、自分の担当プロダクトがひとまずα版リリースしました。 これまでのキャリアでは既存システムの拡張などが多く、ビジネスとしては自分で0からDBのテーブル設計をする機会がなかったため、キャッキャしながら今回初めてすべての設計をしたのですが、現実は厳しい。結構な数の失敗をしてしまいました。 この記事では、そんな「失敗したな〜」と思った設計についてまとめて、供養にしようと思います。 失敗したテーブル定義 というわけで、よかれと思ってテーブル定義してみたらつらかったことたち。 ネット広告系の会社なので、広告のデータ構造のサンプル多めです。 過度なテーブル分割 広告テーブル id name status bid url
「Fate/Grand Order」ユーザー爆増の裏側で、エンジニアが挑んだデータベースとの戦い(1/2 ページ) スマホゲーム「Fate/Grand Order」を支えるインフラエンジニアが、ユーザーが爆発的に増える中で経験した、データベースの負荷対策を振り返る。 このほど国内累計1700万ダウンロードを突破した、スマートフォンゲーム「Fate/Grand Order」(FGO)。2015年7月末にサービスを開始し、18年には年間約885億円を売り上げた(ファミ通調べ)ほどの人気ゲームに成長したが、ユーザーが爆発的に増える中、運営元のディライトワークス社内ではインフラエンジニアが戦っていた。 彼らが経験した戦いの1つは、18年7月に実施したデータベースの負荷対策だ。同社の甲英明さん(技術部 マネジャー)は「ゲーム画面上に『ゲームサーバが混雑しています』と頻繁に表示されたり、画面が『Loa
問題 多対多の関連を作るときの交差テーブル(中間テーブル、関連テーブルなどとも呼ばれる)にどのような名前をつけていますか? 2つのテーブル名を単純につなげた users_magazines のような命名を見かけますが、これはあまり良い名前ではありません。 実体関連モデル - Wikipedia 実体 (entity) は名詞に対応すると考えることができる。例えば、コンピュータ、従業員、楽曲、数学的定理といった名詞である。 関連 (relationship) は2つの実体間の関係を捉えたものである。関連は2つ以上の名詞句を結び付ける動詞に対応すると考えることができる。例えば、企業とコンピュータの間の「所有する」(owns) という関連、従業員と部門の間の「監督する」(supervises) という関連、アーティストと楽曲の間の「演奏する」(performs) という関連、数学者と定理の間の「
TeamSQL のエントリが話題ですが、 DBeaver の知名度がイマイチ低いのでご紹介。 2019/10/23追記 dbcli のエントリも書いたのでぜひご覧ください! マルチプラットフォーム対応のデータベースGUIツールで MySQL, PostgreSQL, MariaDB, SQLite, Oracle, DB2, SQL Server, Sybase, MS Access, Teradata, Firebird, Derby など、多くのデータベースに対応しています。 Enterprise Edition では MongoDB, InfluxDB, Apache Cassandra, Redis, Apache Hive など NoSQL / BigData database にも対応しています。 開発もとても活発で、月2回くらいのペースで新バージョンがリリースされています。
Basic support for relational databases: MySQL, SQL Server, PostgreSQL and others Data Editor SQL Editor Database schema editor DDL Basic ER Diagrams Basic charts Data export/import Task management Database maintenance tools All DBeaver Community featuresAdvanced securityAdvanced support for relational databasesConnection through ODBC driversNoSQL databases support: MongoDB, Cassandra, Redis, Couch
最近、業務ではなく余暇に複数人で地図系開発をしているため、開発者の構築可能環境が揃えられずバックエンドが選べない状況でした。 なのでバックエンドを抽象化しないといけなかったのですが、その結果Web開発系の主要3空間DBでの空間検索記述差がわかったので簡単にまとめておきます。 座標値からのGeometryオブジェクトの作成 GeomFromTextで当然…と思ってましたが、PostGISだと通らなくなってます。 PostGISでは空間系関数は頭にSTをつけることで統一したよう。 頭にSTをつけた関数については、spatialiteも対応してますし、mysqlは最新の5.6でも未対応なものの、後述の通り関係性記述の関数では(既存関数との互換性のためとはいえ)ST_系を出してきているので、将来的にはST_系で統一されるものと思います。 蓄積済みデータに対する、検索クエリの差 蓄積済みデータに対し
column textql csvkit xsv visidata csvtotable daff tabview CSV(またはTSV)を処理するときにはcut, sort, awk, paste, joinといったコマンドを使うことが多いが、CSVの処理で使えそうなコマンドラインツールを簡単に試してみる。 テスト用のCSVデータは下記ページで作成した。 Mockaroo - Random Data Generator and API Mocking Tool | JSON / CSV / SQL / Excel column以外はGitHubのスター順で紹介している。 column stackoverflow.com columnはLinuxコマンドだが検索で結構ひっかかったので紹介。 以下のように見やすいように揃えて出力してくれる。 $ head -n5 test.csv id,fi
はじめに ※この発言は個人の見解であり、所属する組織の公式見解ではありません 用法用量を守り、個人の責任で業務に投入してください 参考資料 2024/02/14追記 実際のテーブル設計の詳細はこちらを参考にどうぞ。 agilejourney.uzabase.com 要件 User情報を保存するときにどのようなテーブル設計を行うか 今北産業で頼む テーブルに状態を持たせず状態毎のテーブルを作る 状態が変わればレコードを消して別のtableに作る tableの普遍的な情報は別に持たせる 僕の考えた最強のDB設計 PostgreSQLをベースの雑なER図を作った。 これを元に話を進める。 table構成 users 親tableであり、すべてのユーザはここに属する。 基本はINSERTのみでUPDATE、DELETEを考慮しない。 user_detail userに付随する詳細の情報がここに登録
0は性別に関する情報が得られない場合に使います。性別に関する情報はあるのだけど1とも2とも言えない場合は9を使います。要は「0でもなくて1でも2でもなければ9」です。 これを知っていればMだとかFだとかを議論をせずに済みますね。 国際規格に従うべき理由 国際規格に従うことは色々と利点があります。まず、どうしてそういうコード体系にしたのかを説明しやすいです。また多言語対応する際も規格通りに書けば伝わるはずなので迷わずに済みます。別システムへのデータの移行や、異なるシステム間でのデータの統合もコード体系が同じならラクラクです。もしかしたら別のプロジェクトで書いたコードをそのまま使いまわせるかもしれません。技術者に対するトレーニングも不要です。 対して、わざわざ国際規格に反する実装をする場合は上記のメリットがそのままひっくり返ってデメリットになりはしますが、もちろん、それなりの理由があれば規格と
【2021/10/15 追記】 この記事は更新が停止されています。現在では筆者の思想が変化している面もありますので,過去の記事として参考程度にご覧ください。PDO に関しては大きく変わっていない部分が多いとは思いますが, PHP 8.x 以降での動作保証はありません。 あらかじめ読んでおきたい記事 Qiita - 【PHP超入門】クラス~例外処理~PDOの基礎 by @7968 初心者がやりがちなミス 以下のどれかに1つでも当てはまるコードは見直す必要があります.付録にリンクを貼っておきましたので,「該当するかも?」という人はクリックして飛んで読んでください.太字にしてあるものは脆弱性に直結する危険度の高いものです. mysql_query などの非推奨関数を利用している SET NAMES あるいは SET CHARACTER SET などで文字コードを指定している そもそもデータベース
あれれ、SQL回帰? 複数のデータモデルに対応していく「NoSQLデータベース」の今:Database Watch(2017年6月版)(1/2 ページ) 単に「NoSQL」といっても、キーバリュー型やグラフ型などデータモデルは多種多様です。さらに最近では複数のデータモデルに対応した「マルチモデル」のNoSQLデータベースが登場してきました。今回はこのトレンドに沿って登場した2つのNoSQLデータベースを比較します。 SQLから離れて始まったはずのNoSQLデータベースですが…… NoSQLデータベースに「あれ? SQL回帰?」と思わず感じてしまった事柄が、最近続けて発表されました。今回はこの「NoSQLの今」を探りましょう。 そもそも「NoSQL」は一般的に「Not Only SQL」の略とされ、基本はSQL(Procedure Language/Structured Query Lang
JJUG CCC 2017 Springで、「データ履歴管理のためのテンポラルデータモデルとReladomoの紹介」という話をしてきました。 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 from Hiroshi Ito 今回の登壇は、株式会社FOLIOのスポンサーセッションです!FOLIOについてはこちらの入社エントリー記事もご参考ください。Toggetterは下のリンクから。 togetter.com 世の中のみなさんが「論理削除フラグ」を使いたくなるモチベーションとしては、実は「削除」ではなく別のビジネスロジックを実装したいだけであることがほとんどだと思います。 たとえば論理削除フラグという名の死亡フラグ - @ledsun blogというエントリを参考にさせていただくと、下記のような要件の例があります。 ・社員が退職(・転
うちのサイトでは地味にアクセス数が多いページで、 意外と遅い DataTable 、なので List を使うと 5 倍早くなる | Moonmile Solutions Blog http://www.moonmile.net/blog/archives/2228/comment-page-1#comment-24840175301577487 というのがあります。もう4年程前の記事で、業務で VB.NET 2.0 を使わないといけなくて、LINQ が使えなかったので、DataTable にしようか、List にしようかという調査の記録です。今だと、もうちょっと色々なやり方があるのですが、ちょっとコメントとが付いたので、計測しなおしてみました。 ■list を使う ■list に構造体を使う 上記2つのケースについて、他の3つのケースにて行っている 「あえて最初に行を追加しておく」処理の記
以前から気になっていたのですが、DataTable/DataSet を使うと遅いのでは?と思っていました。 実際、Visual Studio で自動生成する型付の DataTable を使うと思ったように性能がでないことが多く、結局 SQL でチューニング、ってことになります。 で、具体的に遅そうなところを実験してみました。 単純に DataTable の性能を比較したいので、データベースには使わず値の代入だけ実験します。 列が 100 のテーブルを想定する。 行数を 10000 件挿入する。 これを次のパターンで比較します。 普通に DataTable を使う With 構文を使って、高速化する? for earc を使ってカウンタを使わない方法 名前を使わずに index を使う generic list を使う generic list で構造体/クラスを使う 先に結論から書くと、1
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く