ホームページ データベース mysql チュートリアル 用Twitter的cursor方式进行Web数据分页_MySQL

用Twitter的cursor方式进行Web数据分页_MySQL

Jun 01, 2016 pm 01:49 PM
count cursor twitter テクノロジー

bitsCN.com

  本文讨论Web应用中实现数据分页功能,不同的技术实现方式的性能方区别。

/

  上图功能的技术实现方法拿MySQL来举例就是

  select * from msgs where thread_id = ? limit page * count, count

  不过在看Twitter API的时候,我们却发现不少接口使用cursor的方法,而不用page, count这样直观的形式,如 followers ids 接口

 

  URL:

  http://twitter.com/followers/ids.format

  Returns an array of numeric IDs for every user following the specified user.

  Parameters:

  * cursor. Required. Breaks the results into pages. Provide a value of -1 to begin paging. Provide values as returned to in the response body’s next_cursor and previous_cursor attributes to page back and forth in the list.

  o Example: http://twitter.com/followers/ids/barackobama.xml?cursor=-1

  o Example: http://twitter.com/followers/ids/barackobama.xml?cursor=-1300794057949944903

 

  从上面描述可以看到,http://twitter.com/followers/ids.xml 这个调用需要传cursor参数来进行分页,而不是传统的 url?page=n&count=n的形式。这样做有什么优点呢?是否让每个cursor保持一个当时数据集的镜像?防止由于结果集实时改变而产生查询结果有重复内容?

  在Google Groups这篇Cursor Expiration讨论中Twitter的架构师John Kalucki提到

 

  A cursor is an opaque deletion-tolerant index into a Btree keyed by source

  userid and modification time. It brings you to a point in time in the

  reverse chron sorted list. So, since you can’t change the past, other than

  erasing it, it’s effectively stable. (Modifications bubble to the top.) But

  you have to deal with additions at the list head and also block shrinkage

  due to deletions, so your blocks begin to overlap quite a bit as the data

  ages. (If you cache cursors and read much later, you’ll see the first few

  rows of cursor[n+1]’s block as duplicates of the last rows of cursor[n]’s

  block. The intersection cardinality is equal to the number of deletions in

  cursor[n]’s block). Still, there may be value in caching these cursors and

  then heuristically rebalancing them when the overlap proportion crosses some

  threshold.

 

  在另外一篇new cursor-based pagination not multithread-friendly中John又提到

 

  The page based approach does not scale with large sets. We can no

  longer support this kind of API without throwing a painful number of

  503s.

  Working with row-counts forces the data store to recount rows in an O

  (n^2) manner. Cursors avoid this issue by allowing practically

  constant time access to the next block. The cost becomes O(n/

  block_size) which, yes, is O(n), but a graceful one given n

  a block_size of 5000. The cursor approach provides a more complete and

  consistent result set.

  Proportionally, very few users require multiple page fetches with a

  page size of 5,000.

  Also, scraping the social graph repeatedly at high speed is could

  often be considered a low-value, borderline abusive use of the social

  graph API.

 

  通过这两段文字我们已经很清楚了,对于大结果集的数据,使用cursor方式的目的主要是为了极大地提高性能。还是拿MySQL为例说明,比如翻页到100,000条时,不用cursor,对应的SQL为

  select * from msgs limit 100000, 100

  在一个百万记录的表上,第一次执行这条SQL需要5秒以上。

  假定我们使用表的主键的值作为cursor_id, 使用cursor分页方式对应的SQL可以优化为

  select * from msgs where id > cursor_id limit 100;

  同样的表中,通常只需要100ms以下, 效率会提高几十倍。MySQL limit性能差别也可参看我3年前写的一篇不成熟的文章 MySQL LIMIT 的性能问题。

  结论

  建议Web应用中大数据集翻页可以采用这种cursor方式,不过此方法缺点是翻页时必须连续,不能跳页。

bitsCN.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Stable Diffusion 3 の論文がついに公開され、アーキテクチャの詳細が明らかになりましたが、Sora の再現に役立つでしょうか? Stable Diffusion 3 の論文がついに公開され、アーキテクチャの詳細が明らかになりましたが、Sora の再現に役立つでしょうか? Mar 06, 2024 pm 05:34 PM

StableDiffusion3 の論文がついに登場しました!このモデルは2週間前にリリースされ、Soraと同じDiT(DiffusionTransformer)アーキテクチャを採用しており、リリースされると大きな話題を呼びました。前バージョンと比較して、StableDiffusion3で生成される画像の品質が大幅に向上し、マルチテーマプロンプトに対応したほか、テキスト書き込み効果も向上し、文字化けが発生しなくなりました。 StabilityAI は、StableDiffusion3 はパラメータ サイズが 800M から 8B までの一連のモデルであると指摘しました。このパラメーター範囲は、モデルを多くのポータブル デバイス上で直接実行できることを意味し、AI の使用を大幅に削減します。

自動運転と軌道予測についてはこの記事を読めば十分です! 自動運転と軌道予測についてはこの記事を読めば十分です! Feb 28, 2024 pm 07:20 PM

自動運転では軌道予測が重要な役割を果たしており、自動運転軌道予測とは、車両の走行過程におけるさまざまなデータを分析し、将来の車両の走行軌跡を予測することを指します。自動運転のコアモジュールとして、軌道予測の品質は下流の計画制御にとって非常に重要です。軌道予測タスクには豊富な技術スタックがあり、自動運転の動的/静的知覚、高精度地図、車線境界線、ニューラル ネットワーク アーキテクチャ (CNN&GNN&Transformer) スキルなどに精通している必要があります。始めるのは非常に困難です。多くのファンは、できるだけ早く軌道予測を始めて、落とし穴を避けたいと考えています。今日は、軌道予測に関するよくある問題と入門的な学習方法を取り上げます。関連知識の紹介 1. プレビュー用紙は整っていますか? A: まずアンケートを見てください。

DualBEV: BEVFormer および BEVDet4D を大幅に上回る、本を開いてください! DualBEV: BEVFormer および BEVDet4D を大幅に上回る、本を開いてください! Mar 21, 2024 pm 05:21 PM

この論文では、自動運転においてさまざまな視野角 (遠近法や鳥瞰図など) から物体を正確に検出するという問題、特に、特徴を遠近法 (PV) 空間から鳥瞰図 (BEV) 空間に効果的に変換する方法について検討します。 Visual Transformation (VT) モジュールを介して実装されます。既存の手法は、2D から 3D への変換と 3D から 2D への変換という 2 つの戦略に大別されます。 2D から 3D への手法は、深さの確率を予測することで高密度の 2D フィーチャを改善しますが、特に遠方の領域では、深さ予測に固有の不確実性により不正確さが生じる可能性があります。 3D から 2D への方法では通常、3D クエリを使用して 2D フィーチャをサンプリングし、Transformer を通じて 3D と 2D フィーチャ間の対応のアテンション ウェイトを学習します。これにより、計算時間と展開時間が増加します。

ブロックチェーンデータ分析ツールは何ですか? ブロックチェーンデータ分析ツールは何ですか? Feb 21, 2025 pm 10:24 PM

ブロックチェーンテクノロジーの急速な開発により、信頼できる効率的な分析ツールが必要になりました。これらのツールは、ブロックチェーントランザクションから貴重な洞察を抽出するために不可欠です。この記事では、能力、利点、制限など、市場にある主要なブロックチェーンデータ分析ツールのいくつかについて説明します。これらのツールを理解することにより、ユーザーはブロックチェーンテクノロジーの可能性を最大化するために必要な洞察を得ることができます。

レビュー!深いモデルの融合 (LLM/基本モデル/フェデレーテッド ラーニング/ファインチューニングなど) レビュー!深いモデルの融合 (LLM/基本モデル/フェデレーテッド ラーニング/ファインチューニングなど) Apr 18, 2024 pm 09:43 PM

9 月 23 日、論文「DeepModelFusion:ASurvey」が国立国防技術大学、JD.com、北京理工大学によって発表されました。ディープ モデルの融合/マージは、複数のディープ ラーニング モデルのパラメーターまたは予測を 1 つのモデルに結合する新しいテクノロジーです。さまざまなモデルの機能を組み合わせて、個々のモデルのバイアスとエラーを補償し、パフォーマンスを向上させます。大規模な深層学習モデル (LLM や基本モデルなど) での深層モデルの融合は、高い計算コスト、高次元のパラメーター空間、異なる異種モデル間の干渉など、いくつかの課題に直面しています。この記事では、既存のディープ モデル フュージョン手法を 4 つのカテゴリに分類します。 (1) 「パターン接続」。損失低減パスを介して重み空間内の解を接続し、より適切な初期モデル フュージョンを取得します。

単なる 3D ガウス以上のもの!最先端の 3D 再構成技術の最新概要 単なる 3D ガウス以上のもの!最先端の 3D 再構成技術の最新概要 Jun 02, 2024 pm 06:57 PM

上記と著者の個人的な理解は、画像ベースの 3D 再構成は、一連の入力画像からオブジェクトまたはシーンの 3D 形状を推測することを含む困難なタスクであるということです。学習ベースの手法は、3D形状を直接推定できることから注目を集めています。このレビュー ペーパーは、これまでにない新しいビューの生成など、最先端の 3D 再構成技術に焦点を当てています。入力タイプ、モデル構造、出力表現、トレーニング戦略など、ガウス スプラッシュ メソッドの最近の開発の概要が提供されます。未解決の課題と今後の方向性についても議論します。この分野の急速な進歩と 3D 再構成手法を強化する数多くの機会を考慮すると、アルゴリズムを徹底的に調査することが重要であると思われます。したがって、この研究は、ガウス散乱の最近の進歩の包括的な概要を提供します。 (親指を上にスワイプしてください

革新的な GPT-4o: 人間とコンピューターのインタラクション エクスペリエンスを再構築する 革新的な GPT-4o: 人間とコンピューターのインタラクション エクスペリエンスを再構築する Jun 07, 2024 pm 09:02 PM

OpenAI によってリリースされた GPT-4o モデルは、特に複数の入力メディア (テキスト、オーディオ、画像) を処理し、対応する出力を生成する機能において、間違いなく大きな進歩です。この機能により、人間とコンピューターの対話がより自然かつ直観的になり、AI の実用性と使いやすさが大幅に向上します。 GPT-4o の主なハイライトには、高いスケーラビリティ、マルチメディア入出力、自然言語理解機能のさらなる向上などが含まれます。 1. クロスメディア入出力: GPT-4o+ は、テキスト、オーディオ、画像の任意の組み合わせを入力として受け入れ、これらのメディアから出力を直接生成できます。これにより、単一の入力タイプのみを処理する従来の AI モデルの制限が打ち破られ、人間とコンピューターの対話がより柔軟かつ多様になります。このイノベーションはスマート アシスタントの強化に役立ちます

Golang とフロントエンド テクノロジーの組み合わせ: Golang がフロントエンド分野でどのような役割を果たすかを探る Golang とフロントエンド テクノロジーの組み合わせ: Golang がフロントエンド分野でどのような役割を果たすかを探る Mar 19, 2024 pm 06:15 PM

Golang とフロントエンド テクノロジーの組み合わせ: Golang がフロントエンド分野でどのような役割を果たしているかを調べるには、具体的なコード例が必要です。インターネットとモバイル アプリケーションの急速な発展に伴い、フロントエンド テクノロジーの重要性がますます高まっています。この分野では、強力なバックエンド プログラミング言語としての Golang も重要な役割を果たします。この記事では、Golang がどのようにフロントエンド テクノロジーと組み合わされるかを検討し、具体的なコード例を通じてフロントエンド分野での可能性を実証します。フロントエンド分野における Golang の役割は、効率的で簡潔かつ学びやすいものとしてです。

See all articles