並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 40 件 / 970件

新着順 人気順

heapの検索結果1 - 40 件 / 970件

  • 決済システムの残高管理周りの DB 設計と戦略 - カンムテックブログ

    エンジニアの佐野です。今日はカンムの決済システムでユーザの残高管理をどうやっているかについて書きます。 カンムの製品であるバンドルカードはプリペイド方式のカードです。ユーザによる入金、店舗での利用、運営事由の操作などによりユーザの残高が増減します。このような残高の管理について単純に考えると user_id と balance と updated_at あたりをもったテーブルを用意して balance と updated_at を更新していく方法があるかもしれません。しかしながらカンムでは残高を管理するテーブルを持たず、これらイベントの履歴のみで残高を管理しています。以下、本記事ではこれらユーザの残高が増減するイベントのことをトランザクションと呼びます。ここでは DB の Transaction Processing を意味しません。 本記事のポイントは 残高を管理をするテーブルは作らず、ト

      決済システムの残高管理周りの DB 設計と戦略 - カンムテックブログ
    • できるだけ嘘を書かずに計算量やオーダーの説明をしようとした記事 - えびちゃんの日記

      計算量についてのお話です。対象は、プログラミング経験はあるが計算量のことを知らない初心者から、計算量のことを知っているつもりになっている中級者くらいです。 数式を見たくない人にとっては読むのが大変かもですが、深呼吸しつつ落ちついて読んでくれるとうれしいです。 それから、この記事が自分には合わないな〜と思ったときは、(別の記事を Qiita とかで検索するよりも)この記事の一番下の 参考文献 にある本を読むことをおすすめします。Amazon の試し読みで無料で読めます*1。 TL; DR 関数の増加度合いのことをオーダーと呼ぶよ 計算量は、入力サイズ(など)を受け取ってアルゴリズムの計算回数(など)を返す関数だよ その関数のオーダーについての議論がよく行われるよ オーダーを上から抑えるときは \(O\)、下から抑えるときは \(\Omega\) を使うよ オーダーを上下両方から抑えたいときは

        できるだけ嘘を書かずに計算量やオーダーの説明をしようとした記事 - えびちゃんの日記
      • アメリカでソフトウェアエンジニアの職を探した - pco2699’s blog

        はじめに 前提 アメリカで働くためのビザ 業務経験 2023年のアメリカのテック業界の状況 具体的な就活のステップ ソフトウェアエンジニアのインタビューで求められることの抽象的な理解 レジュメ Job Descriptionから逆算してレジュメを作る 一枚におさめる 数字を用いてスケールとビジネスインパクトを示す なるべく隙間を埋める フォーマット添削ツールにかける レビューを受ける ネットワーキング・リファラル 応募する アメリカの就活はNumber Game 採用のトレンドを追う 時期を見計らう Linkedinで最新の求人を見つける方法 Promotedをすべて非表示にする "Most Recent"順にする 検索クエリを工夫する 設定をブックマークする 時間を決めて巡回する コーディングインタビュー対策 アルゴリズムの地図を脳内に作る 大学やCouseraでアルゴリズムの授業を取る

          アメリカでソフトウェアエンジニアの職を探した - pco2699’s blog
        • 🚀⚙️ JavaScript Visualized: the JavaScript Engine

          JavaScript is cool (don't @ me), but how can a machine actually understand the code you've written? As JavaScript devs, we usually don't have to deal with compilers ourselves. However, it's definitely good to know the basics of the JavaScript engine and see how it handles our human-friendly JS code, and turns it into something machines understand! 🥳 | Note: This post is mainly based on the V8 eng

            🚀⚙️ JavaScript Visualized: the JavaScript Engine
          • メルカリを退職してロンドンのMetaに転職します 〜 外資Big Tech転職活動体験記|松岡玲音|note

            この度、3年半に渡って勤めたメルカリを2022年5月に退職し、この夏からロンドンのMetaにSenior Machine Learning Engineerとして転職することが決まりました!わいわい✌('ω')。その過程で、東京およびロンドンのBig Tech合計5社を数ヶ月かけて対策をし面接に臨んだので、そこで得たノウハウをここで共有できたらと思います。面接を受ける際にNDA(Non Disclosure Agreement)にサインするので具体的な面接の詳細には触れられませんが、伝えられる範囲でできる限り記述しています。 また、Metaから最終的に提示されたオファー条件を最後に記載してあります。なにぶん日本においては給与の話は燃えやすいということもあり、その部分だけ某日本の有名エンジニアに倣って有料にしてあるのですが、ご興味のある方は是非ご購入いただければと思います(1コイン分の金額で

              メルカリを退職してロンドンのMetaに転職します 〜 外資Big Tech転職活動体験記|松岡玲音|note
            • JSの非同期処理を理解するために必要だった知識と学習ロードマップ

              はじめに JavaScript の非同期処理を学習してみて「ある程度自信を持って理解できたと言える」状態に到達したので、その感想とまとめの学習ロードマップとその中でどのような知識が必要になるかを紹介したいと思います。 あるいは、自分が実際に学習してきた道筋に基づいているのでショートカットとして参考にしてもらったり、使えるリソースなどの情報が共有できると思います。もしくは「JavaScript 初心者が非同期処理を理解できるようになるまでの道筋」というストーリーで1つのサンプルとして見ていただけるといいかもしれません。 ChangeLog 大きな変更のみをトラッキングしています。 2022-11-16 本の内容を反映させた追記・修正を追加 2022-05-21 構成を修正 「V8 エンジンから考える」の項目を追加 2022-04-30 「イベントループの共通性質」の項目を追加 「ロードマップ

                JSの非同期処理を理解するために必要だった知識と学習ロードマップ
              • 0から始めるNode.jsパフォーマンスチューニング

                近年の Node.js は API のサーバとしてはもちろん、Nuxt.js や Next.js といった SSR や BFF などフロントエンドのためのバックエンド言語としての人気が高まっています。 フロントエンドエンジニアがコンテキストスイッチ少なくバックエンドの整備ができることは非常に大きな利点です。 ですが、フロントエンド(ブラウザ側)とバックエンド(サーバ側)ではパフォーマンスチューニングで見るべき点が大きく違います。 しかし Node.js アプリケーションのパフォーマンスイシューの見つけ方などがまとまっている資料は少ないです。 そこで、本記事ではフロントエンドエンジニアが Node.js でパフォーマンスイシューを見つけ、改善するため自分が普段パフォーマンスチューニングを依頼されているときにみている基礎的なポイトをまとめていきます。 1. 計測ステップlink Node.js

                  0から始めるNode.jsパフォーマンスチューニング
                • ゼロから作る時系列データベースエンジン

                  軽量な時系列データベースエンジンをスクラッチで開発する機会があったので、どのように実装したのかを必要知識の解説を交えながらまとめていきます。 実装はGo言語によるものですが、本記事のほとんどは言語非依存な内容となっています。 モチベーション 筆者は時系列データを扱うツールをいくつか開発しています。その中の一つであるAliは負荷テスト用のcliツールで、メトリクスをクライアント側でリアルタイム描画できるのが特徴です。リクエスト毎にレイテンシーなどの計測結果が際限なく書き込まれてくる中、同時に一定のクエリパフォーマンスが求められます。 これは言ってしまえば、簡易クエリ機能付きのpush型モニタリングシステムを単一ホストで実現するようなものです。 以前までの実装ではヒープ上の可変長配列にデータポイントを追加していくだけだったので、当然ながら時間の経過とともにメモリ使用量が増加していく問題を抱えて

                    ゼロから作る時系列データベースエンジン
                  • ブラウザにおけるメモリリークを解決するために読んでおけると良い資料 - mizdra's blog

                    最近趣味や仕事の Web アプリケーションでメモリリークに遭遇して、頑張ってメモリリークの原因を突き止めて修正する、ということがあった。その過程でメモリリークについて色々調べて知見が溜まったので、学習資料の紹介という形でアウトプットしてみる *1。 前置き 紹介する記事がかなり偏っていることに注意 冒頭で触れたメモリリークを解決するために読んだ記事をまとめただけなので、内容にそれなりの偏りがある 例えば id:mizdra が遭遇したメモリリークは全てブラウザ上で発生していたものだったので、これから紹介する内容も主にブラウザにおけるメモリリークに焦点を当てたものになる GC がどうメモリをどう解放しているか、何故メモリリークが発生するのかは全てカット 調べれば色々な記事が出てくるので、必要に応じて読んでください 基本的な知識を抑える まずメモリリークとメモリ撹拌の違いを学ぼう どちらも同じ

                      ブラウザにおけるメモリリークを解決するために読んでおけると良い資料 - mizdra's blog
                    • Awesome Dev Tool Tips 🔥

                      Contents (Click to expand) ↕️ Design Mode Pretty Print Command Pallet and Super Search Snippets Live Expressions Tracking Changes Console Shorthand Find Unused Code Rendering Panel Network Paint Times Network Timings Inspect Network Requests Performance Identifying Memory Leaks Raw Memory Inspection Test bfcache Full Refresh Lighthouse Page Size Breakdown Record User Flows Advanced User Flow Opera

                        Awesome Dev Tool Tips 🔥
                      • この半年やったこと、継続していること - from scratch

                        syohex.hatenablog.com studio3104.hatenablog.com あまりにも同じことをしていたので「せっかくなので」と思って筆を執ることにする。 @syohex さん も @studio3104 さん も僕もだいたい同年代の人たちが同年代の sugyan や色々な方の影響を受けて同じことをしているというのはシンパシーを感じますね。 僕は今の仕事はフロントエンドエンジニアであることが多いのですが、「知識に垣根は作らない」をモットーにしているので、色々半年間挑戦してみました。 Leetcode この半年で545問解きました。 github.com sugyan が leetcode に取り組んでいたのも見てたのですが、僕の場合は自分の会社の面接でコード面接をやることがあり、コード面接の時に自分が知らないような事を問題として出すのは恥ずかしいな、という思いから勉強し

                          この半年やったこと、継続していること - from scratch
                        • 型キャストの場所のせいで、秒で終わっていたクエリに1時間超かかるようになってしまった話 - SmartHR Tech Blog

                          SmartHRで届出書類という機能を担当しているプロダクトエンジニアのsato-sと申します。 今日は、以前私が調査にとても苦労したパフォーマンス上の問題の話を紹介したいと思います。 TL;DR PostgreSQLのアップグレードを実施した アップグレード後、今までは問題のなかった特定のクエリの実行に1時間超かかり、DBのCPU使用率がピッタリ100%に張り付くようになった 色々調査した結果、PostgreSQL上の型キャストの場所のせいで、良くないクエリプランが選択されることが原因だった 型キャストの場所には気をつけよう PostgreSQLのアップグレードと挫折 SmartHRでは基本的にWebアプリケーションのデータベースとしてGoogle CloudのCloudSQLによって提供されるPostgreSQLを利用しています。 私の担当している届出書類機能では、利用中のPostgre

                            型キャストの場所のせいで、秒で終わっていたクエリに1時間超かかるようになってしまった話 - SmartHR Tech Blog
                          • JVMのヒープサイズとコンテナ時代のチューニング | Folioscope

                            最近 JVM のヒープ領域とパラメータ、そしてコンテナの関係について調べてました。 案外まとまった情報が少なかったので簡単にまとめました。 Java のヒープサイズを設定 まずは Java のヒープサイズについて簡単なおさらいです。 本番環境で Java アプリケーションを運用する上で、JVM のヒープサイズを決定するのは非常に大事なポイントです。 ヒープ領域の最大サイズを大きくすればガベージコレクション (GC) の回数は減らすことができますが、 必要以上に大きくしすぎると無駄にリソースを消費したり、OOM killer で OS にプロセスを終了させられます。 JVM が使用できるヒープサイズは、Java API の Runtime.getRuntime().maxMemory() で確認できます。 また java の起動オプションに -XX:+PrintFlagsFinal オプショ

                            • コーディングインタビューの対策とその意義 (1/2) - 16bitのメモランダム

                              1.コーディングインタビューとは何か コーディングインタビュー(Coding Interview、またはProgramming Interview)とは、1時間ほどの制限時間内に小さなプログラミング問題を解かせる面接形式のことをいう。プログラマー、またはデータサイエンティストなどの採用試験として、米国を含むいくつかの国で用いられている。「物理的なホワイトボード上にプログラムを書く」という形式で実施されることが多い。「オンライン上の共有エディタで書く」といった形式のこともある。Googleなどは自社のYoutubeチャンネル動画でも説明している。 出題される問題としては、例えば、「複数の数字numbersと整数kが与えられたとき、合計がkとなる数字の組を1つ出力せよ」といったものがある。この問題は有名なので通称が付いており、Two Sumと呼ばれる。 Two Sumの一例。与えられた数値の並

                                コーディングインタビューの対策とその意義 (1/2) - 16bitのメモランダム
                              • アルゴリズムと数学的思考力 - 怠惰を求めて勤勉に行き着く

                                厳しい。年始早々厳しさを感じている。自分のプログラミング力にだ。伸び悩んでいる。 端的に言って、数学力のなさが自分のプログラミング能力に制限をかけている。例えばこの問題。 560. Subarray Sum Equals K 入力として与えられる配列 nums のうち、合計が k となる部分配列の個数を数え上げよ。どうも有名な問題らしいが… まず大前提として、部分配列なので i, j の2重ループで始点・終点を定めて sum(nums[i, j]) = k になるものを数え上げれば必ず答えが得られる。最悪計算量は O(N^3) ただし i < nums.length < 20000 という制約があるので N^3 では遅すぎるから何か考えてくださいというのがスタート地点。 ここで、結果の変わらない累積和を何度も求めているので nums[i, j] = k を求めたい場合、 nums[0, j

                                  アルゴリズムと数学的思考力 - 怠惰を求めて勤勉に行き着く
                                • JVM上で動くWebアプリケーションがリソースを食いつぶす原因を探るためにやったこと【Backlog Play化プロジェクト】

                                  ヌーラボでScalaを書くRubyistの谷本です。ヌーラボでは、Backlogの開発を担当しており、最近ではBacklogをJavaからScala / Play Frameworkに移行するプロジェクトのメンバーでした。 BacklogのPlay化プロジェクトでは、OutOfMemorryError(以下、OOM)の発生やCPU使用率とロードアベレージが上がったままという、Java Virtual Machine(以下、JVM)上で動くBacklogのパフォーマンスに関する問題に対処すべく、何度かHeap/Thread dumpを見る機会がありました。 私がPlay化プロジェクトで取り組んだパフォーマンス改善の知見や経験をもとに、本記事では「JVMで起こったパフォーマンスの問題の切り分け方」についてお届けします。 はじめに 本番環境でしばらく動かしていると、コード自体は正しく実行できるけ

                                    JVM上で動くWebアプリケーションがリソースを食いつぶす原因を探るためにやったこと【Backlog Play化プロジェクト】
                                  • Linux procfs 徹底入門

                                    これは Linux Advent Calendar 2019の 15 日目の記事です。procfs について勉強したことをまとめます。 検証環境CentOS 8 を利用する。 ]# cat /etc/redhat-release CentOS Linux release 8.0.1905 (Core) ]# uname -a Linux localhost.localdomain 4.18.0-80.el8.x86_64 #1 SMP Tue Jun 4 09:19:46 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux procfs とは疑似ファイルシステムのひとつ。 ディスク上に実体は存在せず、メモリから情報を取得する。 カーネルだけが知っている情報 (例えばシステム全体のロードアベレージ/CPU負荷/メモリ利用状況や、プロセスごとの情報)が取得できる。

                                      Linux procfs 徹底入門
                                    • Javaのコンテナのメモリ割り当ての考え方をまきさんに教えていただいたので記録 - Mitsuyuki.Shiiba

                                      何度か教えていただいているので、今度こそしっかり覚えておきたくて、まきさんからのコメントを記録。 ## メモリサイズの考え方 SpringBootのアプリをコンテナとして動かす場合には768MB以上必要で、1GBくらいは割り当てる必要があるのではないかという僕のコメントに対していただいたコメント。 それは不正確..Tomcatを使う場合は最大コネクション(スレッド)がデフォルト200で+50スレッドくらい余裕を見ると250M (-Xss1M)でデフォルトのReservervedCodeCacheSize 240MとDirectMemorySize 10M加えた上にMaxMetaSpaceSizeがざっくり50Mくらい足すと550Mくらい使ってこれHeapを足すとコンテナサイズ— Toshiaki Maki (@making) November 16, 2019 その前提であればHeap 2

                                        Javaのコンテナのメモリ割り当ての考え方をまきさんに教えていただいたので記録 - Mitsuyuki.Shiiba
                                      • iPhoneの知らないと不便な時短機能10選 | ライフハッカー・ジャパン

                                        1.「設定」で「戻る」ボタンを長押しするScreenshot: David Murphy (Other)iOS 14以降のiPhoneなら、「設定」などのシステムアプリを閲覧中に、ボタンを長押しすると複数のページを素早くさかのぼることができます。 例えば、「設定」→「一般」→「キーボード」→「キーボード」のように、iPhoneの設定ページをどんどん進むと、画面左上に「キーボード」と書かれた「戻る」ボタンが表示されます。 このボタンを長押しすると、現在のページに至る途中のページが表示されるので、行きたいページを選択するとそのページにジャンプできます。 2.利用したいカメラモードに素早くアクセスするPhoto: blackzheep (Shutterstock)ポートレート写真を頻繁に撮影する人は、カメラアプリを開いてポートレートモードにスライドさせるのは非効率な感じがするかもしれません(他の

                                          iPhoneの知らないと不便な時短機能10選 | ライフハッカー・ジャパン
                                        • まつもとゆきひろ氏が“幻のPerl6”から学んだ教訓 「OSSの最大の敵」と「セカンドシステムの危険性」

                                          プログラミング言語「Ruby」の国内最大のビジネスカンファレンス「RubyWorld Conference」。Rubyの先進的な利用事例や最新の技術動向、開発者教育の状況などの情報を発信することで、「Rubyのエコシステム(生態系)」を知ることができる場として開催します。ここで登壇したのは、Rubyアソシエーション 理事長のまつもとゆきひろ氏。プログラミング言語の過去、歴史から学ぶ教訓について発表しました。全4回。3回目は、「Second System Syndrome」について。前回はこちら。 退屈は最大の敵 まつもとゆきひろ氏:次はPerlですね。ここまでですでに4回ぐらいPerlの話題が出てきています。なぜかというと、私はPerlが大好きなんですね。実は、Perlが大好きなんですが、Perlのプログラミングは大好きじゃないんですね。あと、Perlのソースコードも大好きじゃないんですね

                                            まつもとゆきひろ氏が“幻のPerl6”から学んだ教訓 「OSSの最大の敵」と「セカンドシステムの危険性」
                                          • コーディング面接対策のために解きたいLeetCode 60問

                                            自分がコーディング面接対策のために解いてよかった LeetCode の問題をコンセプトごとにまとめました。カバーするコンセプトは LinkedList Stack Heap, PriorityQueue HashMap Graph, BFS, DFS Tree, BT, BST Sort Dynamic Programming Binary search Recursion Sliding window Greedy + Backtracking です。 これらの問題が 30 分以内に実装できれば面接の準備は整ったと言っていいと思います。Easy と Medium で問題は構成されてます。進捗を管理するためにGoogle Spreadsheetを用意しました。コピペしてご自由にお使いください。 これらの問題は、LeetCode のリスト機能でも公開されています。クローンすれば自分がすでにど

                                              コーディング面接対策のために解きたいLeetCode 60問
                                            • 「別プロセスの PHP が今何をしているか」を実況するプログラムを PHP で作った - Qiita

                                              0 fgets <internal>:-1 1 <main> <internal>:-1 0 fgets <internal>:-1 1 <main> <internal>:-1 0 fgets <internal>:-1 1 <main> <internal>:-1 ... 0 time_nanosleep <internal>:-1 1 PhpProfiler\Lib\Loop\LoopMiddleware\NanoSleepMiddleware::invoke /home/sji/work/php-profiler/src/Lib/Loop/LoopMiddleware/NanoSleepMiddleware.php:33 2 PhpProfiler\Lib\Loop\LoopMiddleware\KeyboardCancelMiddleware::invoke /home/sji/

                                                「別プロセスの PHP が今何をしているか」を実況するプログラムを PHP で作った - Qiita
                                              • プロと読み解くRuby 2.7 NEWS - クックパッド開発者ブログ

                                                技術部の笹田(ko1)と遠藤(mame)です。クックパッドで Ruby (MRI: Matz Ruby Implementation、いわゆる ruby コマンド) の開発をしています。お金をもらって Ruby を開発しているのでプロの Ruby コミッタです。 去年の記事「プロと読み解く Ruby 2.6 NEWS ファイル」に続き、今年も本日 12/25 リリース予定の Ruby 2.7 の NEWS ファイルの解説をしてみようと思います。NEWS ファイルとは何か、というのは去年の記事を見て下さい。 実は最近、NEWS ファイルを読みやすくしよう、と例を入れたりしていて、以前のものに比べて読みやすくはなっています(英語だけど)。記事中のコードも、NEWS ファイルから引用しているものがあります。本記事では、変更の解説に加え、執筆者らが開発に携わっているということを活かして、「なぜ変更

                                                  プロと読み解くRuby 2.7 NEWS - クックパッド開発者ブログ
                                                • Goで開発した配信サーバーのメモリ使用量問題に向き合う - Mirrativ Tech Blog

                                                  こんにちは。ストリーミングチームの松本です。 Mirrativのストリーミングチームは、低遅延配信や、通知ぼかしというような機能を追加するため、配信のorigin serverの前段にtranscoder serverというものを導入してきました。 tech.mirrativ.stream tech.mirrativ.stream transcoder serverはGoによる内製のミドルウェアであり、主に映像の変換を行う目的で作られました。現在は配信プロトコルの変換(既存プロトコル -> 低遅延プロトコル)などを行っています。また、実際にはサーバー上のDockerコンテナ内で動作しています。 transcoder serverを展開していくにあたり、メモリ使用量が常に増え続ける問題が起きていたため、その際に直面したGoの実メモリ使用量に関する話を書きたいと思います。 メモリ使用量の増加問

                                                    Goで開発した配信サーバーのメモリ使用量問題に向き合う - Mirrativ Tech Blog
                                                  • Lispを実装したくなったら読んでほしい本6選 - Arantium Maestum

                                                    言語実装 Advent Calendar 2022の1日目の記事として書いた。 Lisp Advent Calendar 2022でも枠が空いていたのでダブル投稿。 プログラミング言語を実装してみたい!と思ったらまずは簡単なLispインタプリタから始めるというのは一つの王道だと思う。 複雑な構文解析は要らず最低限の再帰下降法パーサで手に入る構文木を、そのまま再帰的な関数で実行していくtree walking評価器。メモリ確保もヒープにそのまま置いていって、メモリ解放は実装言語のGCに任せるなりプログラムの終了時までやらなかったり。そんなインタプリタを作る経験から得られるものは非常に大きく、どんなプログラマでも一回は試してみてもいいのではないか?と思っている。(個人的な感想です) そんな簡易Lispを実装してみて沼にハマってしまい、より精緻な言語処理系を作りたいと思ったとする。その時点で:

                                                      Lispを実装したくなったら読んでほしい本6選 - Arantium Maestum
                                                    • Go製ミドルウェアのメモリリークを解決した話 - Mirrativ Tech Blog

                                                      インフラ・ストリーミングチームの id:udzura (@udzura)です。今回は、Goミドルウェアのメモリリークを見つけて解決する際に、どのようなプロセスを踏んでいったかを解説します。 Go製のミドルウェアの概要 ミラティブでは、Webアプリケーションのみならず、ミドルウェアに相当する部分についても必要なものは内製しています。その中の一つに、社内で「Radisha」と呼んでいる各種集計とキャッシュなどを行うためのミドルウェアがあります。Radishaは以下のような特徴を備えています。 GET、SET、SETEXなど基本的なRedis互換のコマンドを実装している。そのため、既存のRedisクライアントライブラリから操作が可能である。 ランキング集計、一定時間内のアクセス集計などが行えるよう、Redis にない独自のコマンドを実装している。 高い可用性を志向しており、オンメモリのデータは

                                                        Go製ミドルウェアのメモリリークを解決した話 - Mirrativ Tech Blog
                                                      • How does the Linux Kernel start a Process

                                                        ...and how to ptrace the entry point and m3ss w1th da stack. In this article, you will learn what happens inside the Linux Kernel when a process calls execve(), how the Kernel prepares the stack and how control is then passed to the userland process for execution. I had to learn this for the development of Zapper - a Linux tool to delete all command line options from any process (without needing r

                                                          How does the Linux Kernel start a Process
                                                        • PostgreSQL チューニングよもやま話 - エムスリーテックブログ

                                                          【Unit4 ブログリレー3日目】 こんにちは,エムスリーエンジニアリンググループの榎田です.数学とテレビゲームが好きです. 今回は,Unit4 で運用している "Docpedia" というサービスで実施した SQL チューニングの実例を2つご紹介します.普段の私が意識していなかった, RDBMS の内部機構に関する話が登場して面白かったので,今回の記事を書きました. なお,本稿で扱う議論はすべて PostgreSQL 11.x 以上を対象としており,特にその他の RDBMS で同様の動作をするかは確認していません.定性的な挙動に共通するものはあるかもしれませんが,ここで述べた話はそのままは通らないであろうことをお断りさせてください*1. プロダクトについて index なしで意外と耐えたが,耐えきれなかった話 実際の SQL とテーブル定義 原因の分析 対応策 SELECT DISTIN

                                                            PostgreSQL チューニングよもやま話 - エムスリーテックブログ
                                                          • leetcode時代の外資コーディング面接対策 - Qiita

                                                            GAFAMとかFAANGとかいわれるような企業群、あるいはそれに近い傾向(東京であればおそらくIndeedとかPFNとか)のソフトウェアエンジニア面接対策についてメモを残す。 コーディング面接とleetcode 外資IT企業ではソフトウェアエンジニアを雇う際にコーディング面接を非常に重視する。 業務上のコーディングよりは簡単めのプログラミングコンテスト問題に近く、アメリカの学生やエンジニアがIT企業を受ける際には事前対策を数ヶ月するのが常識になっているようだ。 一般的な面接プロセスについては世界で闘うプログラミング力を鍛える本という本に詳しいが、ソフトウェアエンジニアとしてオファーを得るまでには通常、45~60分程度のコーディング面接を3~5セッション程度経ることになる。 ここ数年、leetcode.comというコーディング面接の過去問サイトが広く候補者に使われるようになっている。 201

                                                              leetcode時代の外資コーディング面接対策 - Qiita
                                                            • Aurora MySQLをMySQL8.0へ移行した話 - inSmartBank

                                                              こんにちは!SREを担当してます上平と申します。 このエントリーではAurora MySQL5.7互換からMySQL8.0互換への移行を実施した際の流れや学びに関して紹介したいと思います! B/43 では Aurora MySQL5.7系をサービスリリースから使っており、Aurora MySQL バージョン2のサポート終了日(2024/10/31)が近づいているのもあったので、移行することにしました。 Amazon Aurora バージョン - Amazon Aurora これからAurora MySQL8.0へ移行を検討されている方の参考になれば幸いです。 想定される読者 Aurora MySQL 5.7系を使っていて、アップグレードを検討している方 実際の Aurora MySQL 8.0 への移行手順を知りたい方 AWS インフラに興味がある方 前提 Aurora MySQL5.7互

                                                                Aurora MySQLをMySQL8.0へ移行した話 - inSmartBank
                                                              • golangではスタックとヒープを気にする必要が無い

                                                                調べようと思ったきっかけは、golang では以下のように ローカル変数のアドレスを戻り値としても問題ないということ。 package main import ( "fmt" ) type Animal struct { Name string Age int } func main() { animal := allocAnimal() fmt.Printf("allocate animal structure %p", animal) } func allocAnimal() *Animal { return &Animal{} } C/C++ ではローカル変数のポインタを戻り値とした場合、 スタック領域のポインタを関数外に渡してしまうため、コンパイル時点で警告が表示されます (なぜエラーにしない) 実行時には最悪、セグメンテーションフォールトで落ちます そのため、malloc や n

                                                                  golangではスタックとヒープを気にする必要が無い
                                                                • Node.js でメモリ肥大化の原因を特定してみた

                                                                  はじめに ユビーでエンジニアをしているおおいしつかさです。 これは、Ubie Engineering Advent Calendar 2023の12月7日の記事になります。 何を書こうかなー、最近はユビーの根幹システムのリアーキテクチャをやっているのでその辺かなーと思ったのですが、まだ仕掛かり中だということと具体な業務に直結しそうな内容なので抽象化して書くのが面倒そうだなーと思ってたところに軽いトピックが飛び込んできたので、そのことを書くことにしました。 ChatGPTはみなさん使われていると思いますが、ぼくも別の業務でOpenAI関連の機能開発に携わっています(ユビーで働くといろんな業務に携われるのがいいところです) 。 その仕事の中で、Node.js環境でメモリ肥大化の事象に遭遇したので、それをどのように発見して改善したかについてお話します。 ぼくは今も昔もRubyが大好きですが、ふだ

                                                                    Node.js でメモリ肥大化の原因を特定してみた
                                                                  • Amazon Aurora MySQLの不具合でローカルディスクが枯渇しクエリが実行出来なくなった話 - Kaizen Platform 開発者ブログ

                                                                    SRE Group Managerをしている前田です。今回の記事は当社で遭遇したAmazon Aurora MySQLの不具合の話になります。 3行まとめ Amazon Aurora MySQLのローカルストレージが異常な速度で消費、枯渇しクエリを実行するとエラーが発生するようになった 原因調査とAWSサポートへの問い合わせの結果、Aurora MySQL 2.10.0 の不具合と判明し、2.10.2へバージョンアップで解消 Auroraのローカルストレージは自動拡張されないので、残容量の監視をしましょう 事象発生と解決までを時系列で記載。 2021年10月、Auroraに対してクエリが実行出来なくなる 社内メンバーよりBIツールからAurora MySQLに対してのクエリがエラーになるとのことで、クエリに limit 100 を付けると実行出来、 limit 1000だと Error w

                                                                      Amazon Aurora MySQLの不具合でローカルディスクが枯渇しクエリが実行出来なくなった話 - Kaizen Platform 開発者ブログ
                                                                    • 最近のMySQL 8.0 の内部一時テーブルの改善について

                                                                      MySQL では sort_buffer_size 以上にソート領域が必要になった場合、もしくは一部の条件に当てはまるSQLについては、内部一時テーブルを作成し処理を行うという仕組みになっています。 8.4.4 MySQL での内部一時テーブルの使用 この内部一時テーブルの仕組みに MySQL 8.0 から TempTable ストレージエンジンを利用する事ができるようになりました。 TempTable ストレージエンジンの挙動については、過去の弊社ブログ記事で説明しています。 TempTable ストレージエンジンについて TempTable ストレージエンジンはMySQL 8.0で導入されたということもあり、初期パッチバージョンに比べて改善が行われています。 今回の記事では、TempTableストレージエンジンの最近追加された機能についてご紹介します。 基本的なソートバッファと内部一時

                                                                        最近のMySQL 8.0 の内部一時テーブルの改善について
                                                                      • WebAssemblyハンズオン: 実際に動かして基礎を学ぶ(翻訳)|TechRacho by BPS株式会社

                                                                        概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Hands-on WebAssembly: Try the basics — Martian Chronicles, Evil Martians’ team blog 原文公開日: 2020/08/25 著者: Polina Gurtovaya、Andy Barnov サイト: Evil Martians -- ニューヨークやロシアを中心に拠点を構えるRuby on Rails開発会社です。良質のブログ記事を多数公開し、多くのgemのスポンサーでもあります。 日本語タイトルは内容に即したものにしました。画像はすべて元記事からの引用です。 Web開発の一般的な知識のみを前提とするシンプルなハンズオンチュートリアルで、WebAssembly(Wasm)を始めてみましょう。実行可能なコード例を用いてWasmを味わうのに必要なものは「コー

                                                                          WebAssemblyハンズオン: 実際に動かして基礎を学ぶ(翻訳)|TechRacho by BPS株式会社
                                                                        • How We Made Bracket Pair Colorization 10,000x Faster In Visual Studio Code

                                                                          Register now for a full day of community, learning, and all things Visual Studio Code Bracket pair colorization 10,000x faster September 29, 2021 by Henning Dieterichs, @hediet_dev When dealing with deeply nested brackets in Visual Studio Code, it can be hard to figure out which brackets match and which do not. To make this easier, in 2016, a user named CoenraadS developed the awesome Bracket Pair

                                                                            How We Made Bracket Pair Colorization 10,000x Faster In Visual Studio Code
                                                                          • Marie Kondo your software stack with open source

                                                                            As someone makes more money, expenses once considered luxuries can suddenly become seen as necessities: It’s called lifestyle creep. In the world of software development, we can suffer from a similar affliction: stack creep. Where hardware limitations once restricted developers to a minimalist approach, increased processing power, memory, and storage have led many down a more maximalist path. It’s

                                                                              Marie Kondo your software stack with open source
                                                                            • PostgreSQL: 「OR」を避けてパフォーマンスを向上させよう(翻訳)|TechRacho by BPS株式会社

                                                                              概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: avoid OR for better PostgreSQL query performance - Cybertec 原文公開日: 2018/05/07 著者: Laurenz Albe サイト: CYBERTEC -- データサイエンス分野でのPostgreSQLサポートやコンサルティングを行っている企業です ※挿絵は原著者自らによるものです。 生きるべきか『OR』死すべきか、それが問題だ」 「帰れ!」「非効率!」「同義反復!」 © Laurenz Albe 2018PostgreSQLクエリのチューニングは私たちCybertecの日常的な業務ですが、チューニング中にクエリにORを1つでも見つけた瞬間、恐ろしさに身の毛もよだつ思いがします。たいていの場合、ORはクエリのパフォーマンス低下の原因となるからです。 言うまでもないこ

                                                                                PostgreSQL: 「OR」を避けてパフォーマンスを向上させよう(翻訳)|TechRacho by BPS株式会社
                                                                              • Berkeley DB (Hash) の実装 - knqyf263's blog

                                                                                普段あまりこういう誰の役に立つのか分からない記事は書かないのですが、解析をするまでの背景がOSSに関するとても良い話なので重い腰を上げて書きました。 概要 古のアプリケーション組み込み型のデータベースとしてBerkeley DBがあります。元々はカリフォルニア大学バークレー校によって開発され、その後Oracleによって買収されています。データ操作にSQLは使えず、アプリケーションに埋め込んで使用します。RDBまでは必要ないけどちょっとしたDBが必要みたいな時に使われているようです。機能はシンプルで組み込みのため性能も良いとのこと。詳しくは以下に書いてます。 docs.oracle.com 本記事ではそのBerkeley DBの中身がどのように実装されているのかの雰囲気を記します。Berkeley DBはBtree accessやHash access, Queue/Recno access

                                                                                  Berkeley DB (Hash) の実装 - knqyf263's blog
                                                                                • Rustで実装するmalloc - NTT Communications Engineers' Blog

                                                                                  この記事は、NTT Communications Advent Calendar 2021 21日目の記事です。 はじめに こんにちは、イノベーションセンターの鈴ヶ嶺(@suzu_3_14159265)です。普段は、クラウド・ハイブリッドクラウド・エッジデバイスなどを利用したAI/MLシステムに関する業務に従事しています。本日は、Rustで動的メモリ確保(dynamic memory allocation)のmallocを実装してPythonやvimを動かしてみようという内容をお届けします。 また、去年もRustネタのアドベントカレンダーを書いているのでぜひ見ていただけると嬉しいです! NTTコミュニケーションズ Advent Calendar 2020 Rustで実装するNetflow Collector 実装するmallocのアルゴリズム 今回実装するmallocのアルゴリズムは小さな

                                                                                    Rustで実装するmalloc - NTT Communications Engineers' Blog