AI在庫管理の開発チームでバックエンドエンジニアをしている沖です。今回は、AI在庫管理の医薬品検索において、MySQLの全文検索機能を使った話を紹介しようと思います。 この記事は秋の技術特集 2024の 8 記事目です。 今までの医薬品検索では満足できないユーザーがいた なぜMySQLの全文検索機能を採用したのか 全文検索機能を導入する 全文検索インデックスを付与したテーブルを作成する パーサー 照合順序と正規化 全文検索インデックスを使用して検索する データを最適な状態に保つために おわりに 今までの医薬品検索では満足できないユーザーがいたAI在庫管理には、医薬品の在庫一覧画面など、医薬品名で絞り込む画面がたくさんあります。この絞り込み機能を実現するために、これまではSQLのLIKE検索を利用していました。 LIKE検索は、使い慣れたSQLを用いて部分一致検索を実現できる便利な方法です
はじめに みなさん、環境構築ってめんどくさくないですか? 僕はめんどくさいです。本を使ってPHPの勉強をする機会があったのですが、環境構築をしたくなかったのでDockerを用いることにしました。 やること 『PHP7+MariaDB/MySQL マスターブック』では、XAMPPというパッケージを使用するのですが、Dockerにて環境を再現します。PHP:7.4を使えるようにする Apacheを使えるようにする MariaDBを使えるようにする この本ではメールを用いるためメールサーバを立ち上げる 注意:この記事ではXAMPPに似た環境を構築する手順を示すのみであり、詳しい解説等はしません(今後追記していくかは未定) 動作環境 M1MacBookAir(MacOS 13.1)Docker ファイル構成

皆様こんにちは、NewsPicksエンジニアの米澤です。 先日2023/03/30は、こちらでアナウンスしていた通り、サービスの停止を伴うシステムメンテナンスを実施させて頂きました。NewsPicksをご利用頂いている皆様には、ご迷惑おかけいたしました。 今回はこのメンテナンスの中で行われたDBテーブルのmigrationについてお話ししたいと思います。 ことの始まり やったこと 方針決め utf8mb4に対応していないテーブルを調べる migrationを作成する 影響範囲を調べる 開発環境でリハーサルを行う メンテナンスの日 最後に ことの始まりNewsPicksではバグの検知にBugSnagを利用しています。 ある時、BugSnagにこんなエラーが通知されてきました。 org.springframework.orm.hibernate4.HibernateJdbcExcepti

みなさん、おはようございます! CARTA fluctエンジニア の なっかー@konsent_nakka です。 CARTATECHBLOG アドベントカレンダー 12/14ということで、普段DBのロックについてあまり意識したことがない人に向けた実は覚えておきたいロックについての知識をざっとまとめてみました。 とりあえずこれだけ読んでおけば最低限は困らない、もし何か困った時にはあそこで出てきた内容をもう少し深く調べて見るか、というきっかけになれば良いなと思います。 厳密な定義よりも普段DBを扱う中でロックについてあまり意識したことがないような人にもすっと入ってくるように簡単な表現を優先して書いていますがご了承ください。 目次 留意事項 排他ロックと共有ロック トランザクション分離レベル SELECTのロックレベルを変更する 共有ロック: LOCK IN SHARE MODE 排他ロ
こんにちは!エンジニアの福間(fkm_y)です。 弊社でデータベースの技術顧問をして頂いている三谷(mita2)さんに、MySQL5.7の追加機能についての開発部向け勉強会を実施いただきましたのでそのレポートをお伝えします。 開催背景 弊社では三谷さんによるデータベース勉強会を定期的に開催しており、3月にもMySQLロックの基礎編の勉強会を開催しました。 ANDPADでは、今年の4月にAuroraMySQLをVer.1(MySQL5.6互換)からVer.2(5.7互換)にバージョンアップを実施しました。tech.andpad.co.jpAuroraMySQL Ver.2 になることで使えるようになった、MySQL5.7で追加された機能について開発者に知ってもらい、普段の開発に取り入れてもらうためにMySQL5.7の勉強会を開催することとしました。 今回は追加された150以上の新機能

※本記事は筆者styprが英語で執筆した記事を株式会社FlattSecurity社内で日本語に翻訳したものになります。 TL;DR Node.jsのエコシステムで最も人気のあるMySQLパッケージの一つであるmysqljs/mysql (https://github.com/mysqljs/mysql)において、クエリのエスケープ関数の予期せぬ動作がSQLインジェクションを引き起こす可能性があることが判明しました。 通常、クエリのエスケープ関数やプレースホルダはSQLインジェクションを防ぐことが知られています。しかし、mysqljs/mysql は、値の種類によってエスケープ方法が異なることが知られており、攻撃者が異なる値の種類でパラメータを渡すと、最終的に予期せぬ動作を引き起こす可能性があります。予期せぬ動作とは、バグのような動作やSQLインジェクションなどです。 ほぼすべてのオンラ

株式会社ラクーンホールディングスのエンジニア/デザイナーから技術情報をはじめ、世の中のためになることや社内のことなどを発信してます。 bashパフォーマンスMySQLInnoDBDB設計インデックス こんにちは、羽山です。 今回はMySQL のプライマリキーにUUID を採用する場合に起きるパフォーマンスの問題を仕組みから解説します。MySQL(InnoDB) &UUID のパフォーマンスについては各所でさんざん議論・検証されていますが、論理的に解説した記事が少なかったり一部には誤解を招くようなものもあるため、しっかりと理由から理解するための情報として役立つことができればと思っています。UUID と比較される古き良き昇順/降順のプライマリキーはというと、MySQL の InnoDB において良いパフォーマンスを出すために縁の下の力持ちのような働きをしてくれているケースが実は少な
![MySQLでプライマリキーをUUIDにする前に知っておいて欲しいこと | Raccoon Tech Blog [株式会社ラクーンホールディングス 技術戦略部ブログ]](/image.pl?url=https%3a%2f%2fcdn-ak-scissors.b.st-hatena.com%2fimage%2fsquare%2f5e9d48c3c6f38c2d5f71897d98efcb251289d1f9%2fheight%3d288%3bversion%3d1%3bwidth%3d512%2fhttps%253A%252F%252Ftechblog.raccoon.ne.jp%252Fwp-content%252Fuploads%252F2021%252F07%252Fboard-755792_800.jpg&f=jpg&w=240)
こんにちは、お久しぶりです。虎の穴ラボのA.M.です。 前回の記事「全文検索エンジンについて調べてみた」から大分間が空いてしまいましたが、今回はとらのあなのサービスで使用頻度の高いMySQLで、実際に全文検索をやってみたいと思います。MySQLで手軽に全文検索を実現するための手法としては、以下の2つが挙げられます。MySQLのFULLTEXTインデックス:MySQLの標準機能。v5.7から日本語に対応。 Mroonga:GroongaベースのMySQLストレージエンジン。 ※FULLTEXTインデックスやMroonga、Groongaなどについて詳しくは前回の記事や、第3回ライトニングトークイベント記事をご参照ください。 toranoana-lab.hatenablog.com toranoana-lab.hatenablog.com 今回は、記事のタイトルにもあるように、Mroong

以前,MySQL (正確にはMariaDB) を使った際,いろいろはまったので記載します. 使ったバージョンが古い(MariaDB 10.1.37,MySQL 5.7くらいに相当)なので,最新版では治っているところもいくつかあります.sql_modeをデフォルトの設定で使わない これはよく言われていることですが,sql_modeがデフォルトでは変な値が入ったりエラーになって欲しいところがスルーされたりしてまずいので,適切なsql_modeを設定します. 第18回MySQL5.7のデフォルトのSQLモードを確認してみる:MySQL道普請便り|gihyo.jp …技術評論社MySQLのSQLモードをstrictモードで設定する。 - Qiita ただ,MySQL 5.7以降はデフォルト設定が改善されたようです.(でも確認すべきですが)MySQL ::MySQL 8.0 Refer
2019年8月2日、インフラストラクチャエンジニアやネットワークエンジニア向けの勉強会「インフラ・ネットワークエンジニア勉強会」がアイスタイル株式会社で開催されました。同会では、AWSに関するインフラ・ネットワーク視点の話や、オンプレ環境の話など、過去の事例を共有。6人のエンジニアが成功・失敗談をシェアしました。「スイッチ交換でデータベースがすごく苦労した話」に登壇したのは、株式会社アイスタイルのsuzukito氏。講演資料はこちら スイッチ交換でデータベースがすごく苦労した話suzukito氏:レイヤ3スイッチの交換でデータベースがすごく苦労した話をしたいと思います。 自己紹介です。鈴木と申します。アイスタイルのデータベースエンジニアをやっています。 お話しすることは、スイッチ交換でMySQLのレプリケーションが壊れました。その顛末を共有したいと思います。 まず、ある日、インフラのほう

MySQL 5.7 において InnoDB の全文検索機能が日本語に対応するようになって約 3 年が経ちました。今では InnoDB で日本語の全文検索ができることは広く知られるようになってきたのではないでしょうか。そんな中、今回はMySQL 8.0 においてもまだ修正されていない、全文検索の制限について確認していきたいと思います。MySQL 5.7 の日本語全文検索とは まず、MySQL 5.7 において何が変わったのかについて簡単におさらいしたいと思います。MySQL 5.6 まではデフォルトで FULLTEXT パーサーが使用されていたため、日本語のように単語の初めと終わりが明確でない言語で FULLTEXT インデックスを使用しようとした場合、単語を区切ったり N-gram で分割した状態でDB に格納するなど、使用するためにはDB のデータを変形して格納する必要がありま

MySQL5.6~ で日本語全文検索ができるぞ!!! 最近MariaDBばかりやっていて、MySQLの存在を忘れていたのですが、今まで英語しか利用できなかったのに、いつの間にか標準で日本語全文検索ができるようになっていたので、久しぶりに触って見ようと思います。これがまた、意外に簡単!だったので、その設定/実装方法をできるだけ簡単に紹介したいと思います 全文検索とは あれですね。通常テーブルに設定するカラムの索引ではなく、行全体に対して、インデクシングをする設定といえばいいのかしら IROTEC(アイロテック) ラバー ダンベル 40KGセット (片手20kg×2個) 筋トレダイエットダイエット器具 トレーニング ベンチプレス 筋肉 出版社/メーカー: 株式会社スーパースポーツカンパニーメディア: その他購入: 2人 クリック: 31回この商品を含むブログを見る ウィキペディアで見るとこ

こんにちは、CTOの島田です。 今回は、StudyplusのDBのmigrationで発生した問題とその解決ステップを説明したいと思います。 前提 schema.rbでの運用 ridgepoleの導入 "0000-00-00 00:00:00" 問題 問題の原因は? 暫定対応 問題の解消 あるべき姿 まとめ 前提 まずは前提。AuroraMySQL 5.7Rails 5.1.6 (対応当時。今は5.2.2) schema.rbでの運用 Studyplus本体のmigrationは、色々な経緯によって2018年5月まで、いわゆるRailsのmigration の作法とは異なる方法で運用されてました。 schema.rb でスキーマの状態を管理してはいたのですが通常とはやや異なる管理がされていました。 以下、改変して一部抜粋。 ActiveRecord::Schema.define do
MySQLのutf8 charsetは、やれ「罠」だの「絵文字が入らなくて使えない」だの「utf8という名前はutf8mb4の別名にすべき」だの、散々な言われようでディスられてかわいそうな charset なんだけど、というか主に私がそう言ってる気もするんだけど、そろそろ utf8mb3 のエイリアスとしての utf8 は消え去ろうとしてるみたいなので、ここでちょっと勝手にフォローしておく。UTF-8 エンコーディングの RFC は RFC3629で、ここでUTF-8 は最大4バイトと書かれている。 しかし、この RFC3629 の前のRFC2279では6バイトだった。 RFC3629 の日付は 2003/11 なので、つまり 2003/11 よりも前はUTF-8 の1文字のバイト数は最大6バイトだったのだ(少なくともRFC上では)。MySQL が Unicode に対応したのはバ
MySQLのZero Dateへの対処法MySQLの0000-00-00 00:00:00は使ってはならない - そーだいなるらくがき帳 このエントリで、MySQLのゼロが含まれる日付け、いわゆるZero Dateについての問題点が色々挙げられているのを見かけたので、手短に対処法を述べておきたい。 Zero Dateが存在する理由なぜそんな厄介なデータが存在するのかというのは、開発の経緯や互換性といった深淵な理由からなので気にしないで欲しい。まあ、人間は完璧ではないので、人間が作るプログラムも完璧ではないということだ。 当然ながらSQL標準から外れているものは、例外的な使い方をしたい場合を除き、使うべきではない。アンチパターンも使い方次第という話もあるが、例外的な使い方は基本的に苦労が増えるので使うべきではない。SQLモード実は、Zero DateはSQLモードで禁止できる。SQLモー

■ 結論 ●sql_mode が NO_ZERO_DATE (NO_ZERO_IN_DATE) であり、かつ STRICT_TRANS_TABLE (STRICT_ALL_TABLES) であるとき、'0000-00-00' は SELECT しかできない。 (MySQL5.7 以上のデフォルト値であるときの挙動) ●sql_mode が NO_ZERO_DATE (NO_ZERO_IN_DATE) でない、または STRICT_TRANS_TABLE (STRICT_ALL_TABLES) でないとき、NULLを許可しない列に限り、'0000-00-00' は IS NULL にもマッチする。 (MySQL5.6 以下のデフォルト値であるときの挙動) ■ はじめに ●MySQLでは0年0月0日、すなわち '0000-00-00' などといった日付を登録することができる。 https

結論 何がいいたいかといいますと0000-00-00 00:00:00があるとORMも死ぬし、DBマイグレーションツールも死ぬし、そもそもMySQLからポスグレにデータを持っていくこともFDWをすることも出来なくて死ぬのじゃ。— そーだい@初代ALF (@soudai1025) 2018年4月25日 色々困るので使わない。 理由 以下に理由を述べるSQL標準ではない 正論で殴った場合。 0000-00-00 00:00:00の仕様が難しい 0000-00-00 00:00:00 はMySQLの独自な仕様で NOT NULL制約のカラムではNULLと等価であり、NULLではない という仕様がある。 "NOT NULL として宣言された DATE および DATETIME カラムでは、次のようなステートメントを使用することで、特殊な日付 '0000-00-00' を検索できます"https:
4月にMySQLの日本語コレーションについて語り合う場に呼ばれていろいろ話を聞いてきました。すぐにブログを書こうと思ったんですが、はや2ヶ月経過…。 ときどき、自分がMySQLの文字コードに関して発表する際に、次のようなスライドをいれてるんですが、MySQL 8.0 でとうとう日本語コレーションが入ることになったのに、なんか期待してたのと違いました。 で、その辺の話を聞きました(2ヶ月も経ってるのでうろ覚え)。 Q. わざわざ日本語ロケール作るんだったら日本人が扱いやすいロケールにしてほしい utf8mb4_ja_0900_as_csはMySQLが独自に考えたものではない。Unicode規格に従っている。過去にいろいろ独自にやって失敗してきてるので、もう独自にやるのは避けたい。ai(accent insensitive)で「ハ」=「パ」=「バ」になるのも、ci(case insensi

リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く