用Twitter的cursor方式进行Web数据分页_MySQL
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
Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Kertas StableDiffusion3 akhirnya di sini! Model ini dikeluarkan dua minggu lalu dan menggunakan seni bina DiT (DiffusionTransformer) yang sama seperti Sora. Ia menimbulkan kekecohan apabila ia dikeluarkan. Berbanding dengan versi sebelumnya, kualiti imej yang dijana oleh StableDiffusion3 telah dipertingkatkan dengan ketara Ia kini menyokong gesaan berbilang tema, dan kesan penulisan teks juga telah dipertingkatkan, dan aksara bercelaru tidak lagi muncul. StabilityAI menegaskan bahawa StableDiffusion3 ialah satu siri model dengan saiz parameter antara 800M hingga 8B. Julat parameter ini bermakna model boleh dijalankan terus pada banyak peranti mudah alih, dengan ketara mengurangkan penggunaan AI

Ramalan trajektori memainkan peranan penting dalam pemanduan autonomi Ramalan trajektori pemanduan autonomi merujuk kepada meramalkan trajektori pemanduan masa hadapan kenderaan dengan menganalisis pelbagai data semasa proses pemanduan kenderaan. Sebagai modul teras pemanduan autonomi, kualiti ramalan trajektori adalah penting untuk kawalan perancangan hiliran. Tugas ramalan trajektori mempunyai timbunan teknologi yang kaya dan memerlukan kebiasaan dengan persepsi dinamik/statik pemanduan autonomi, peta ketepatan tinggi, garisan lorong, kemahiran seni bina rangkaian saraf (CNN&GNN&Transformer), dll. Sangat sukar untuk bermula! Ramai peminat berharap untuk memulakan ramalan trajektori secepat mungkin dan mengelakkan perangkap Hari ini saya akan mengambil kira beberapa masalah biasa dan kaedah pembelajaran pengenalan untuk ramalan trajektori! Pengetahuan berkaitan pengenalan 1. Adakah kertas pratonton teratur? A: Tengok survey dulu, hlm

Kertas kerja ini meneroka masalah mengesan objek dengan tepat dari sudut pandangan yang berbeza (seperti perspektif dan pandangan mata burung) dalam pemanduan autonomi, terutamanya cara mengubah ciri dari perspektif (PV) kepada ruang pandangan mata burung (BEV) dengan berkesan dilaksanakan melalui modul Transformasi Visual (VT). Kaedah sedia ada secara amnya dibahagikan kepada dua strategi: penukaran 2D kepada 3D dan 3D kepada 2D. Kaedah 2D-ke-3D meningkatkan ciri 2D yang padat dengan meramalkan kebarangkalian kedalaman, tetapi ketidakpastian yang wujud dalam ramalan kedalaman, terutamanya di kawasan yang jauh, mungkin menimbulkan ketidaktepatan. Manakala kaedah 3D ke 2D biasanya menggunakan pertanyaan 3D untuk mencuba ciri 2D dan mempelajari berat perhatian bagi kesesuaian antara ciri 3D dan 2D melalui Transformer, yang meningkatkan masa pengiraan dan penggunaan.

Perkembangan pesat teknologi blockchain telah membawa keperluan untuk alat analisis yang boleh dipercayai dan cekap. Alat ini adalah penting untuk mengekstrak pandangan berharga daripada urus niaga blockchain untuk lebih memahami dan memanfaatkan potensi mereka. Artikel ini akan meneroka beberapa alat analisis data blockchain terkemuka di pasaran, termasuk keupayaan, kelebihan dan batasan mereka. Dengan memahami alat ini, pengguna dapat memperoleh pandangan yang diperlukan untuk memaksimumkan kemungkinan teknologi blockchain.

Pada 23 September, kertas kerja "DeepModelFusion:ASurvey" diterbitkan oleh Universiti Teknologi Pertahanan Nasional, JD.com dan Institut Teknologi Beijing. Gabungan/penggabungan model dalam ialah teknologi baru muncul yang menggabungkan parameter atau ramalan berbilang model pembelajaran mendalam ke dalam satu model. Ia menggabungkan keupayaan model yang berbeza untuk mengimbangi bias dan ralat model individu untuk prestasi yang lebih baik. Gabungan model mendalam pada model pembelajaran mendalam berskala besar (seperti LLM dan model asas) menghadapi beberapa cabaran, termasuk kos pengiraan yang tinggi, ruang parameter berdimensi tinggi, gangguan antara model heterogen yang berbeza, dsb. Artikel ini membahagikan kaedah gabungan model dalam sedia ada kepada empat kategori: (1) "Sambungan corak", yang menghubungkan penyelesaian dalam ruang berat melalui laluan pengurangan kerugian untuk mendapatkan gabungan model awal yang lebih baik.

Ditulis di atas & Pemahaman peribadi penulis ialah pembinaan semula 3D berasaskan imej ialah tugas mencabar yang melibatkan membuat inferens bentuk 3D objek atau pemandangan daripada set imej input. Kaedah berasaskan pembelajaran telah menarik perhatian kerana keupayaan mereka untuk menganggar secara langsung bentuk 3D. Kertas ulasan ini memfokuskan pada teknik pembinaan semula 3D yang canggih, termasuk menjana novel, pandangan ghaib. Gambaran keseluruhan perkembangan terkini dalam kaedah percikan Gaussian disediakan, termasuk jenis input, struktur model, perwakilan output dan strategi latihan. Cabaran yang tidak dapat diselesaikan dan hala tuju masa depan turut dibincangkan. Memandangkan kemajuan pesat dalam bidang ini dan banyak peluang untuk meningkatkan kaedah pembinaan semula 3D, pemeriksaan menyeluruh terhadap algoritma nampaknya penting. Oleh itu, kajian ini memberikan gambaran menyeluruh tentang kemajuan terkini dalam serakan Gaussian. (Leret ibu jari anda ke atas

Model GPT-4o yang dikeluarkan oleh OpenAI sudah pasti satu kejayaan besar, terutamanya dalam keupayaannya untuk memproses berbilang media input (teks, audio, imej) dan menjana output yang sepadan. Keupayaan ini menjadikan interaksi manusia-komputer lebih semula jadi dan intuitif, meningkatkan kepraktisan dan kebolehgunaan AI. Beberapa sorotan utama GPT-4o termasuk: kebolehskalaan tinggi, input dan output multimedia, penambahbaikan selanjutnya dalam keupayaan pemahaman bahasa semula jadi, dsb. 1. Input/output merentas media: GPT-4o+ boleh menerima sebarang kombinasi teks, audio dan imej sebagai input dan terus menjana output daripada media ini. Ini memecahkan had model AI tradisional yang hanya memproses satu jenis input, menjadikan interaksi manusia-komputer lebih fleksibel dan pelbagai. Inovasi ini membantu kuasa pembantu pintar

Gabungan teknologi Golang dan bahagian hadapan: Untuk meneroka bagaimana Golang memainkan peranan dalam bidang bahagian hadapan, contoh kod khusus diperlukan Dengan perkembangan pesat Internet dan aplikasi mudah alih, teknologi bahagian hadapan telah menjadi semakin penting. Dalam bidang ini, Golang, sebagai bahasa pengaturcaraan bahagian belakang yang berkuasa, juga boleh memainkan peranan penting. Artikel ini akan meneroka cara Golang digabungkan dengan teknologi bahagian hadapan dan menunjukkan potensinya dalam bidang bahagian hadapan melalui contoh kod khusus. Peranan Golang dalam bidang front-end adalah sebagai cekap, ringkas dan mudah dipelajari
