18545
iOSアプリの開発をしています。  
現在のTwitterのようなタイムライン機能を実装しているのですが、  
タイムラインの内容を全てまとめてクライアント側に送信するのではなく、  
まずクライアントからのリクエストに対する検索結果の10件をクライアントに送信。  
その後クライアントがページの一番下まで移動し、さらにローディングを開始した時に検索結果の次の10件を送信。・・・・  
のような処理をしたいと思っているのですが、現状ではタイムラインのすべての情報を送信してしまっています。  
これだとゆくゆくタイムラインへの投稿が増えた時に通信に時間がかかってしまうため、上述した機能を実装したいのですが、  
どのようなロジックで他のアプリがそれらの機能を実装しているのかがわかりません。

なにかありましたら、随時補足いたしますので、よろしくお願いします。
CC BY-SA 3.0
2015-11-07T01:30:14.600
18498
2015-11-08T10:43:56.560
12470
question
php cakephp
CakePHPもしくはPHPを用いて処理の分割をする。
手軽なのはoffset使う方法です。  
<http://www.oss-db.jp/measures/dojo_19.shtml>  
DBにより違いがあるようですね。  
あと、エントリが増減すると重複したり表示されないエントリが発生する可能性がありますね。  
＃10件表示した後1件追加して11件目以降を表示すると10件目が11件目になってるので重複  
＃10件表示した後1件取り消しして11件目以降を表示すると10件目が9件目になってるので表示されない

大規模になってくるとoffsetでは負荷が上がる可能性あるので、  
・エントリのIDは大きい方が新しいようにふる  
・現在表示したID以前のIDを対象とするようwhereで指定  
と言ったように、primary keyに設定しているような何らかのID様のものを使います。  
あわせて前述の問題も防げます。  
<http://d.hatena.ne.jp/hirafoo/20110409/1302283428>  
＃IDが1234まで表示されてたら1234より小さいIDから最新10件の表示にする。  
ただ、この辺はDBによりもっと便利な機能があったりするかもしれません。

さらに大規模になると、それでも大変になります。  
そこで古いデータを分割したり  
<http://www.atmarkit.co.jp/ait/articles/0611/22/news141.html>  
IDの付け方を工夫したり  
<http://www.slideshare.net/moaikids/20130901-snowflake>  
します。  
この辺になってくるとシステムにより色々でしょうね。
CC BY-SA 3.0
2015-11-08T10:43:56.560
18545
2015-11-08T10:43:56.560
12301
18498
answer