データベースのデータを一括処理するプログラムでやりがちなパジネーションドリフトの失敗例と対策
2024.07.20 15:48 (4ヶ月前) 投稿者: カテゴリ: Django , MySQL , Python
データベースから特定の条件に合致したレコードを抽出し、更新するバッチ処理の中で、LIMIT OFFSET を使って1000件程度づつループする時、処理内容によっては全件走査されずに漏れが発生する場合があります。その内容の説明と解決方法を書いています。
データベースから特定の条件に合致したレコードを抽出し、更新するバッチ処理の中で、LIMIT OFFSET を使って1000件程度づつループする時、処理内容によっては全件走査されずに漏れが発生する場合があります。その内容の説明と解決方法を書いています。
social-auth-app-django + python-social-auth でログイン時の redirect_uri の HTTPスキーム の http / https をコントロールする方法です。
django admin画面のフィルター機能に不満があるので、 複数選択可能なListFilterを作成します。
django admin画面はmodelのデータ管理に非常に便利な機能です。
4/1から新卒で入社した高津です。
新卒エンジニアとして半年間働いてきて、現場でさまざまなことを勉強させていただきました。その中でも、もっと早く知っておきたかった便利なツール、Python の書き方など、幅広いあれこれを記事にしたいなと思います。
就社してからは初めてのブログ投稿となります。
今年の春に入社しました、情報システム部の清瀬です。
2021年春に入社しました、情報システム部の清瀬です。
当社TORICOは、主にインターネット上での書籍の販売サービス、つまりECサイトを自社開発して展開しています。 実店舗を営業するにあたり、レジ(POSシステム) が必要となります。TORICOでは、POSシステムもWeb技術で自社開発し運用しています。当社と同様に Web技術で POSを開発される方に向けて、私が対応したいくつかの経験を書き残します。
Django には、便利な ORマッパーが搭載されており、SQLを一切書かずともRDBの操作が行えます。 今回、SQL実行時に思ったようにインデックスが使用されず、パフォーマンスが出ない問題がありました。 これは、生SQLを実行した場合も同様にインデックスが使われなかったため、Django の問題ではなく、実行計画が最適に作成されなかったというSQL上の問題(というか仕様?)です。 SQL内にインデックスヒントを強引に書き込むことでインデックスを強制した所、正常なパフォーマンスとすることができたので、その方法を書きます。
Django でウェブアプリを作る際、遅い処理をタスクキューにするには、celery が便利です。今回、社内勉強会で Django + celery のチュートリアルを行ったので、celery で簡単なタスクを動かすまでを書いておきます。 内容としては Celery ドキュメントの First steps with Django をなぞっています。 環境 MacOS Python 3.6.5 Django 2.1 Celery 4.2.1 Redis Redisは、キューのブローカーとして使います。Redis以外にも、RabbitMQ やAmazon SQS が使えます。 Redis サーバの起動方法は書いていませんので、適宜起動してください。
Django に最初から用意されているビュー(ジェネリックビュー) を使えば、 オブジェクトのリスト表示 オブジェクトの作成 オブジェクトの詳細表示 オブジェクトの更新 オブジェクトの削除 のWebアプリが簡単に作成できます。 Create, Read, Update, Delete をまとめて CRUD と呼んだりしますが、Django では CRUD に対応した汎用的な基底ビューコントローラが用意されているため、それを継承してビューを作ることで、安全で、読みやすいコードを書けます。
PyCharm 2016 の Docker サポートの使い勝手が良いです。 Docker で開発環境を作るのは初めてだったのですが、 ローカル ( mac ) は Docker Toolbox を使って開発環境を作る。PyCharm のデバッガでステップ実行できるようにする。 ソースコード、およびログディレクトリは Docker イメージの中に入れず、ホストのディレクトリをマウントして使う 公開サーバを見越して uwsgi, nginx の設定も作っておく という所までできたので、手順を書きます。
ローカル環境に Django プロジェクトを2つ作り、OAuth2で(ダミーの)プロフィール情報を取得するまで書きます。 2つの Django プロジェクトを作ります。test_provider, test_consumer です。 OAuth2の認証フローは、サーバ間通信のため「Authorization Code」形式で行います。 OAuth2についての情報は IPAのページ などにあります
Mezzanine とは、Django (Python のWeb フレームワーク )上で動く、CMS フレームワークです。使い勝手としては Wordpress に似ています。 (英語) http://mezzanine.jupo.org/docs/index.html 最初から入っている機能としては WYSIWYG エディタ ( Tiny MCE ) が入っているのでリッチテキストコンテンツが簡単に投稿できる インラインページ編集 … 管理者ログインしていれば、公開済みページの各セクションに編集ボタンが出て編集可能 Twitter Bootstrap Disqus連携 Gravatar連携 Twitter連携 などがあり、そもそも Django なのでテーマの切り替えが簡単だったり、プラグインの入れて機能を拡張したりなどが容易にできます。プラグイン( Django モジュール) の開発者は世界中に多く存在します。