スクリプト類とメニューボタン

トップ ソフト 雑記 日記 リンク
ラベル ふぁぼるっく の投稿を表示しています。 すべての投稿を表示
ラベル ふぁぼるっく の投稿を表示しています。 すべての投稿を表示

2017/10/01

ふぁぼるっくの収集を停止しました

2009年7月から8年続けてきたふぁぼるっくですが、この度データの収集を停止しました。
公開されているサイトも、そのうち停止します。

公開当初は、まだふぁぼったーが有って、まだfavstarは無い状態でした。
ふぁぼったーの収集状況が完璧ではなかったのを見つけて作り始め、自分自身が面白いと感じるツイートを見つけるために開発を続けてきました。

ふぁぼ爆撃などの文化が生まれたため、アカウント毎にふぁぼの重み付けなどを行い、「あまりふぁぼらない人のふぁぼは貴重」という評価からスコアを算出したりしていました。

複数のサーバを運用し、収集したデータを一つのデータベースへ集め、色々と新技術を試してみたりする実験的なプロジェクトとしても役立ちました。
個人的にこれだけの大規模データを処理したことがなかったので、大変勉強になりました。

多くの方に支持をいただき、一時期はたくさんの方に見ていただけたのですが、設備投資が追いつかないままに競合が登場し、すっかり注目を集められないプロジェクトとなってしまいました。
今後もデータが増え続ける中で、運用にかかるコストが大きくなりすぎてしまい、 趣味の延長として続けるには辛くなってきたので、そろそろ終わりだなと決断した次第です。

つらみポイント

  • 公開当初、Twitter API勉強会@大阪で発表枠の申し込みに遅れ、知名度アップのスタートダッシュに失敗した。
  • クライアント作者へふぁぼるっくの宣伝をしなかったため、ふぁぼったーを開く機能を持っていたクライアントは軒並みfavstarに対応した。いやらしいかなと思ってやらなかったんだけど、もっと出て行かないと存在を示せない。
  • 自宅サーバから始まり、VPSへ移行し、AWSへ移り、再び自宅サーバへ戻ってきたが、データ取得部分だけはAWSに残していて費用が辛い。しかし現状が一番マシ。
  • AWS時代はサーバ代・通信量だけで年間80万円掛かっていた。スポットインスタンスとかも活用していたんだけど。それとは別に自宅サーバも別に運用。全データをインターネット側に置く費用は用意できなかった。
  • 広告を貼っているが年間5000円も収益がない。広告が非表示・別インデックスで表示が高速化される有料会員制度を作ってみたりしたが、契約はゼロだった。お試しみたいな宣伝が必要だったと思う。
  • 現在は2TBのSSDを5台でRAID5を構成しているが、寿命がどんどん削れる。2年は持たなさそう。
  • データベースはPostgreSQLで運用しているが、トランザクションID周回によるバキュームが常に動き続けている状態。そのうち間に合わなくなるのでは。データベースインスタンスそのものを水平分割するべきなのだろうけど、同じスペックのサーバを揃える費用が…。
  • スコア計算を導入したが、Twitterがインフラとして広がるにつれて計算量が爆発的に増えてしまい、当初は10分で終わっていた毎時処理が最終的には2週間以上も掛かるようになってしまった。Xeonの10コア20スレッド、メモリ64MBのサーバが常にロードアベレージ60以上。ぶろるっくも同じデータベースサーバで管理しているので、負荷に引きずられる。
  • 自分がマストドン( @osapon@mstdn.nere9.help )へ移行してしまい、Twitterの面白い話題を追いかけることが無くなった。面白い話題は大体RTで回ってくるのと、ふぁぼるっく側でスコア計算をやめてしまったため、自分自身がふぁぼるっくを見なくなってしまった。
  • 新しいこともしてみたくなる中で、ストレージの再設計とそれに伴う作り直しをするモチベーションが沸かなかった。
  • ふぁぼがいいねに変更されて、名前の由来が分からなくなった。(一番つらい)

収集したデータ

アカウント数54,906,240
ツイート数5,878,570,230
ふぁぼ数35,238,885,993
RT数10,629,973,759
データベースサイズ4.42TB

アプリケーション連携をしてくれた皆さん、見に来てくれた皆さん、ありがとうございました。

2015/12/08

面倒な使い方の事例(PostgreSQL Advent Calendar 2015)

PostgreSQL Advent Calendar 2015の8日目です。

去年はAWSのRDS for PostgreSQLを使い始めたという記事とlibpqxxを使った記事を書きました。
今回は、費用と制約から発生している面倒な事例の紹介です。

拙作「ふぁぼるっく」がVPSからAWSへ移行した話は、今月1日の記事に書きました。
その構成です。
今回はPostgreSQLのアドベントカレンダーですので、PostgreSQLの部分だけ抜き出します。

家のアイコン:Liam Thynne

1つのシステムですが、PostgreSQLが3つ居ます。
まずは、RDS。これが一番のメインで、アプリケーションサーバは基本的にここへアクセスしに来ます。
PostgreSQLとほぼ同じ機能を持っているので、いままでPostgreSQLにアクセスしていたプログラムは接続先を書き換えるだけで使えるようになります。

そしてもう1台は、EC2上に構築されたPostgreSQL。
上でRDSは「ほぼ同じ機能」と書きましたが、RDSだけでは実現できないこともあります。
それがサードパティー製拡張モジュールの利用。

標準のRDS for PostgreSQL 9.4.4で使えるモジュールは以下のものです。(2015年11月。9.4.5では3つ増えています
rds=> SELECT name,default_version,comment FROM pg_available_extensions ORDER BY name;
          name          | default_version |                               comment
------------------------+-----------------+---------------------------------------------------------------------
 btree_gin              | 1.0             | support for indexing common datatypes in GIN
 btree_gist             | 1.0             | support for indexing common datatypes in GiST
 chkpass                | 1.0             | data type for auto-encrypted passwords
 citext                 | 1.0             | data type for case-insensitive character strings
 cube                   | 1.0             | data type for multidimensional cubes
 dblink                 | 1.1             | connect to other PostgreSQL databases from within a database
 dict_int               | 1.0             | text search dictionary template for integers
 dict_xsyn              | 1.0             | text search dictionary template for extended synonym processing
 earthdistance          | 1.0             | calculate great-circle distances on the surface of the Earth
 fuzzystrmatch          | 1.0             | determine similarities and distance between strings
 hstore                 | 1.3             | data type for storing sets of (key, value) pairs
 intagg                 | 1.0             | integer aggregator and enumerator (obsolete)
 intarray               | 1.0             | functions, operators, and index support for 1-D arrays of integers
 isn                    | 1.0             | data types for international product numbering standards
 ltree                  | 1.0             | data type for hierarchical tree-like structures
 pg_buffercache         | 1.0             | examine the shared buffer cache
 pg_freespacemap        | 1.0             | examine the free space map (FSM)
 pg_prewarm             | 1.0             | prewarm relation data
 pg_stat_statements     | 1.2             | track execution statistics of all SQL statements executed
 pg_trgm                | 1.1             | text similarity measurement and index searching based on trigrams
 pgcrypto               | 1.1             | cryptographic functions
 pgrowlocks             | 1.1             | show row-level locking information
 pgstattuple            | 1.2             | show tuple-level statistics
 plcoffee               | 1.4.3           | PL/CoffeeScript (v8) trusted procedural language
 plls                   | 1.4.3           | PL/LiveScript (v8) trusted procedural language
 plperl                 | 1.0             | PL/Perl procedural language
 plpgsql                | 1.0             | PL/pgSQL procedural language
 pltcl                  | 1.0             | PL/Tcl procedural language
 plv8                   | 1.4.3           | PL/JavaScript (v8) trusted procedural language
 postgis                | 2.1.5           | PostGIS geometry, geography, and raster spatial types and functions
 postgis_tiger_geocoder | 2.1.5           | PostGIS tiger geocoder and reverse geocoder
 postgis_topology       | 2.1.5           | PostGIS topology spatial types and functions
 postgres_fdw           | 1.0             | foreign-data wrapper for remote PostgreSQL servers
 sslinfo                | 1.0             | information about SSL certificates
 tablefunc              | 1.0             | functions that manipulate whole tables, including crosstab
 test_parser            | 1.0             | example of a custom parser for full-text search
 test_shm_mq            | 1.0             | Test code for shared memory message queues
 tsearch2               | 1.0             | compatibility package for pre-8.3 text search functions
 unaccent               | 1.0             | text search dictionary that removes accents
 uuid-ossp              | 1.0             | generate universally unique identifiers (UUIDs)
 worker_spi             | 1.0             | Sample background worker
 xml2                   | 1.0             | XPath querying and XSLT
(42 行)
ふぁぼるっくでは、話題になっているツイートに含まれる単語からトレンドを抽出しています。
PostgreSQLで単語での分解をするとなると、mecabを使ったtextsearch_jaモジュールですね。
しかし、上の一覧には含まれていません。PostgreSQL 9.4の標準モジュールではないからです。
そしてサードパティー製extensionのインストールもできないとなると、RDSで日本語の形態素解析はできないということです。

EC2の起動スクリプト内で、エフェメラルディスク(インスタンスが持っている揮発ディスク)にデータベースを作成し、外部テーブルでRDSを見に行く設定を作り上げます。
後は、EC2のcronで定期的に外部テーブルから文章を取り出して形態素解析し、再び外部テーブル経由でRDSにある結果用テーブルへ書き込みます。

最後の1つは、自宅サーバとして運用しているPostgreSQLです。
ふぁぼるっくのデータは2006年分から保持しています。
しかし過去のデータはなかなか参照される機会も無く、RDSに置いておいてもお金が掛かるばかりです(RDS移行初期は置いていたが死にそうになった)。

テーブルのみで、132億2336万6699タプル、1.2TB。
favlook=# SELECT SUM(reltuples) AS タプル数
favlook-#      , SUM(mbytes) AS mbytes
favlook-# FROM (
favlook(#   SELECT relname
favlook(#        , reltuples::bigint
favlook(#        , (relpages / 128) AS mbytes
favlook(#   FROM pg_class
favlook(#   WHERE relkind='r'
favlook(#   ORDER BY mbytes DESC
favlook(# ) a;
  タプル数   | mbytes
-------------+---------
 13223366699 | 1207722
(1 行)
インデックス込みで、2.1TB。
favlook=# SELECT SUM(reltuples) AS タプル数
favlook-#      , SUM(mbytes) AS mbytes
favlook-# FROM (
favlook(#   SELECT relname
favlook(#        , reltuples::bigint
favlook(#        , (relpages / 128) AS mbytes
favlook(#   FROM pg_class
favlook(#   -- WHERE relkind='r'
favlook(#   ORDER BY mbytes DESC
favlook(# ) a;
  タプル数   | mbytes
-------------+---------
 47350820338 | 2108039
(1 行)
dfコマンドでも、だいたい同じぐらいの容量になっています。
$ df
Filesystem            Size  Used Avail Use% Mounted on
/dev/md127            7.2T  2.2T  4.7T  32% /mnt

自宅サーバでは、一定期間ごとに継承テーブルを作り、その親テーブルをRDSから外部テーブルとして参照しています。
パフォーマンスの問題で継承テーブルは100以上継承しない方がいいとLet's Postgresには書かれていたのですが、1つのリレーションは100以上に継承してしまっています。
リレーションによっては1テーブルあたりのプライマリキーがメモリに乗らないサイズになってしまっているので、これ以上分割するのも厳しいし、まとめるのも厳しいと、前にも後ろにも進めないような設計になっています。

RDS側からは、自身が持つ最近のデータと、外部テーブルの古いデータが見えており、条件によってアクセスするテーブルを切り替えたりUNIONしたりして読み込んでいます。
また外部テーブルを使う際に、複雑な条件をつけるとテーブル全てを読み込んでくるようなSQLが発行されてしまうため、場合によってはアプリケーションサーバから直接自宅サーバへ接続してデータを取得し、プログラム上で取得したデータを元に再度RDSへクエリーを投げたりするような処理もあります。
外部テーブルはJOINに弱いと覚えておくと良いでしょう。

あとは、毎日自宅サーバからRDSへ古くなったデータを取りに行き、pg_bulkloadで自宅のPostgreSQLに挿入しています。


もともと自宅サーバはレプリケーションで負荷分散をしていました。しかし時々レプリケーションに失敗してスレーブの作り直しが発生し、データが多すぎるために復旧まで1週間ほどかかるという状態でした。酷い場合にはpg_basebackup後のWAL追っかけ再生が失敗して運用に載る前にスレーブが死ぬなど、辛い状況に陥ったのと、最近ではpg_bulkloadを使う関係で、マスター単体で運用しています。
サーバが一台余っていてもったいないので、はやくマルチマスタが実現すると良いですね。Postgres-XCはちょっと怖くて触っていないです(怖い=XCから戻って来れない&XCが本体に追従していくか不安だった)。

自宅サーバにもSSDを積んでいた時期があるのですが、1年ぐらいで書き込みできなくなってしまうので、最近はHDDでRAID5にしています。一生寿命を気にしなくていい高速ストレージが出ると、ストレージが原因の負荷分散もしなくて良さそうになるので、早くお手頃な値段で買えるようになるといいですね。


ということで、こんな運用もあるよ、という紹介でした。

2015/12/01

VPSを調子に乗って使い過ぎた話(レンタルサーバー Advent Calendar 2015)

レンタルサーバー Advent Calendar 2015の1日目です。
VPSのお話もOKとのことなので、VPSのお話。

拙作「ふぁぼるっく」では規模が大きくなるにつれ、自宅サーバを飛び出しVPSに移行しました。


上のスライドは2年半ほど前のもので、20ページ目の状態の後、以下のような構成になりました。
  • ウェブサーバ1台
  • PostgreSQLサーバ1台
  • Memcachedサーバ1台
  • MongoDBサーバ1台
  • UserStream接続用サーバ4台
の計8台(自宅にさらに3台)構成です。サーバはさくらのVPSで、以前も使っていたのですが、このときからSSDやローカルエリア接続が使えるようになりました。
SSDにローカルエリア接続、いいですねぇ。システムの処理能力が上がった分、データ収集にも力が入ります。

そして半年ほど経ったある日、急にシステムの反応が遅くなりました。
数日かかって原因を調べてみると、PostgreSQLサーバでディスクの書き込み失敗にエラーが発生しています。
再起動してもすぐに再発するし、これはどうやら仮想サーバが載っている親サーバで障害でも起きているのでは?と思いサポートに連絡しました。

わたし「ディスク壊れてるっぽい。エラー出る」
サポート「負荷掛けすぎだから制限かけてるんよ」
わたし「(さくら・・・!)」

確かに、VPS、Virtual Private Serverで「事実上の私的なサーバ」であって本質は1台のサーバに複数のインスタンスが起動しているだけなんですよね。
そして約款の禁止事項にも『当社もしくは第三者の設備等またはサーバ設備もしくは電気通信設備等の利用もしくは運営に支障を与える行為、または与えるおそれのある行為』と書かれています。
みんなで少しずつお金を出し合って使っているみんなのサーバなので、「自宅サーバのSSDが一年ぐらいで壊れる量の書き込みを、一定料金で使い放題だー」と使っちゃダメなんです。

制限が掛けられるまでは、全く負荷的なものを感じなかったので、どのくらいまでが、1インスタンスあたりで想定されていた負荷なのかは分からずじまいでした。
設備の内容は企業戦略的なものもあって、事前に上限負荷を公開するのは難しいかと思いますが、制限が掛かったことぐらいは通知して欲しいなーと思いました。

ということで、負荷が高いサーバをVPSで動かすのは気をつけましょう。
やばそうだなと思ったら専用サーバへ。
ちなみに、このあとAWSへ移行しました。

2013/12/07

findAndModifyでお手軽キュー

MongoDB Advent Calendar 2013の7日目です。

MongoDBをメッセージキューとしての利用方法を紹介したいと思います。

拙作「ふぁぼるっく」では、TwitterのREST API呼び出しによるクロールのほか、UserStreamに接続し大量(現在約7000アカウント)の利用者からのふぁぼやRT情報を収集しているため、人気のツイートが現れると突発的に処理量が増えます。
メインのデータベースとしてPostgreSQLを採用していますが、処理量増大時にデータベースでは接続本数が足りなくなり、また接続~レコードの存在確認~レコード挿入までに時間が掛かるため、他の挿入処理まで待っているとUserStreamは情報がどんどん流れてくるために処理しきれないという事態が発生してしまいます。

そこで、とりあえず情報を貯めておくキューを用意することになり、ふぁぼるっくでは、ここでMongoDBを採用しています。
MongoDBに至った理由としては、以下の点があります。

・大量接続が可能
→PostgreSQLだとサーバーリソース的に1000接続ぐらいが限界なので、同時に20000接続まで可能なMongoDBは魅力的。実際にメモリ2GBのVPS上で運用していますが、20000接続までできました。

・接続から挿入までが速い
→書き込み完了前に処理が返ってきます。失敗する可能性もありますが、正常に動いている限りは失敗する可能性が少ないです。要件的には、失敗しても再取得可能なため無視できます。

・重複していても上書きできる
→MySQLで言うREPLACE INTOができます。正確に言うと、重複したキーを持つデータを保存したら常に上書きです。これは複数のUserStreamから同じデータが投入される場合があるのですが、一般的なメッセージキューとは少し違った要件があり、プライマリキーとなる部分が同じものの場合は1件として扱いたいためです。

・複数のワーカーから取得しても重複して取得しない
→キューとして扱うので、ワーカーで取得した情報は、他のワーカーから見えて欲しくない。そこでfindAndModifyコマンド。

 _人人人人人人人_
> findAndModify <
 ̄Y^Y^Y^Y^Y^Y^Y ̄

通常、MongoDBには、insert、update、find、removeなどのコマンドでコレクションにアクセスします。
findAndModifyコマンドは、
{
  query: ドキュメント,
  sort: ドキュメント,
  remove: 真偽値,
  update: ドキュメント,
  new: 真偽値,
  fields: ドキュメント,
  upsert: 真偽値
}
というコマンド書式をしており、findコマンドと同じようにqueryパラメータで指定したオブジェクトが取得できる一方、updateパラメータで指定した値で更新したり、removeパラメータの指定でオブジェクトの削除が行えます。
これら一連の処理はアトミックな処理となっており、オブジェクトの取得と更新がまとめて行われます。
例えば、testコレクションにこのようなデータが入っていたとします。
> db.test.find();
{ "_id" : 1, "name" : "takashi" }
{ "_id" : 2, "name" : "hanako" }
ここで
> db.test.findAndModify({query:{"_id":1},update:{"name":"ten_p"}});
{ "_id" : 1, "name" : "takashi" }
を実行すると、_id:1のデータが取得できました。
内容を見てみると
> db.test.find();
{ "_id" : 1, "name" : "ten_p" }
{ "_id" : 2, "name" : "hanako" }
updateで指定した内容に置き換わっています。
> db.test.findAndModify({query:{"_id":1},remove:true});
{ "_id" : 1, "name" : "ten_p" }
removeを指定すると、データを取得しつつ
> db.test.find();
{ "_id" : 2, "name" : "hanako" }
そのデータが削除されます。

ふぁぼるっくでは、この仕組みを利用して、複数のワーカーが並列してMongoDB上のキューからデータベースへの更新処理を行っています。

以上、MongoDBを使うとこんなこともできるよ!という紹介でした。

ふぁぼるっくではTwitterをお使いの方のふぁぼ情報やふぁぼられ情報を集計しています。
ぜひ登録してみてください!

2013/11/02

Treasure Dataを使ってみました。(Upload編)

拙作ふぁぼるっくはPostgreSQLを使用しているのですが、データの蓄積量が増えてきたことから集計処理に時間が掛かるようになってきました。
しかし持っているサーバーはどれも高負荷状態。
なんとか手持ちのCPUリソースを割かずに集計する方法はないものかと考えていたところ、Treasure Dataを思い出したので使ってみました。

アカウントを作って、コマンドラインのツールをインストールします。
gem install td
で完了。
tdコマンドでアカウントを設定します。ちなみに、tdコマンドのバージョンは0.10.91です。

Treasure Dataのバルクインポート説明 http://docs.treasure-data.com/articles/bulk-import を見ると、データはまず加工(Prepare)し、行単位のデータベースへアップロード、そこから列単位のデータベースに変換(Perform)して、PlazmaというTreasure Dataのカラム型データベースへ投入(Commit)するという流れになります。

16個に分割された合計82GBのcsvファイルをアップロードします。
td import:upload --auto-create favlook.fav_old \
--auto-perform --auto-commit \
--parallel 8 \
--columns status_id,id,tp,user_id \
--time-value 0 \
-o prepared_parts /mnt/sdd/tmp/fav_*.csv

「--time-value 0」というオプションについてですが、Treasure Dataでは時間の追加カラムが必要なようで、これがないと時間書式のカラムがないというエラーになってしまいました。
もしデータに時間のカラムが存在するなら「--time-column ~」でカラムを指定すると良いようです。
今回使うデータには、時間カラムがなかったため、--time-value 0で全てゼロとして指定しました。

アップロードは回線速度次第です。気長に待ちましょう。
--auto-perform --auto-commitを付けているとアップロード完了時にそのままperformに進むと思うのですが、今回はいくつかのファイルが失敗してしまいました。
Next Steps:
  => check td-bulk-import.log and re-upload prepared_parts/fav_2012c_csv_66.msgpack.gz: Retry failed.
  => check td-bulk-import.log and re-upload prepared_parts/fav_2013d_csv_17.msgpack.gz: Retry failed.

端末に出てくるリトライ回数は0となっています。tdコマンドのオプション指定を見てみたのですが、リトライの指定方法が分かりませんでした。
td-bulk-import.logというログファイルも出力されるのですが、ローテーションするみたいで、直近のものしか残っておらず、該当ファイルの失敗理由などは分かりませんでした。

とりあえず失敗したファイルを再度アップロードします。
しかし1つ15GBも有るファイルをもう一度上げ直すのは大変。でも、失敗したファイルだけ再送信できます。
td import:upload favlook_fav_old_2013_10_25_1382661066 prepared_parts/fav_2012c_csv_66.msgpack.gz
td import:upload favlook_fav_old_2013_10_25_1382661066 prepared_parts/fav_2013d_csv_17.msgpack.gz

と、アップロードセッション名、対象ファイルを指定します。
prepared_partsというディレクトリは、最初のimport:upload時に指定した「-o prepared_parts」が効いています。
このディレクトリにPrepareしたデータが格納されています。
そして前に指定したセッション名、こちらはアップロード時の画面に出てくるので、それを見ていると分かるのですが、出力が多いと見逃してしまうかもしれません。
これはtdコマンドのimport:listで表示できます。
+---------------------------------------+-----------------+-----------+--------+-------+-------------+-------------+---------------+---------------+
| Name                                  | Table           | Status    | Frozen | JobID | Valid Parts | Error Parts | Valid Records | Error Records |
+---------------------------------------+-----------------+-----------+--------+-------+-------------+-------------+---------------+---------------+
| favlook_fav_old_2013_10_25_1382661066 | favlook.fav_old | Uploading |        |       |             |             |               |               |
+---------------------------------------+-----------------+-----------+--------+-------+-------------+-------------+---------------+---------------+
1 rows in set

アップロードが終わると

Next Steps:
  => execute 'td import:perform favlook_fav_old_2013_10_25_1382661066'.

と、次にやるべきことが表示されます。

td import:perform favlook_fav_old_2013_10_25_1382661066
Job 5451708 is queued.
Use 'td job:show [-w] 5451708' to show the status.

ジョブが開始されました。td job:showで状況が見られるようです。

td job:show -w 5451708
Organization :
JobID        : 5451708
Status       : running
Type         : bulk_import_perform
Priority     : NORMAL
Retry limit  : 0
Result       :
Database     : favlook
Query        :
queued...
  started at 2013-10-25T23:19:16Z
  13/10/25 23:19:23 WARN conf.Configuration: fs.default.name is deprecated. Instead, use fs.defaultFS
  13/10/25 23:19:25 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
  13/10/25 23:19:26 INFO storage.S3StorageBackend: listing s3 files with prefix e71b21f4-3b82-4d7b-9ce8-4fc1ca74bf94/ps/
  13/10/25 23:19:28 WARN conf.Configuration: fs.default.name is deprecated. Instead, use fs.defaultFS
  13/10/25 23:19:28 INFO mapred.JobClient: Running job: job_201306191947_257352
  13/10/25 23:19:29 INFO mapred.JobClient:  map 0% reduce 0%
  13/10/25 23:19:53 INFO mapred.JobClient:  map 1% reduce 0%
  13/10/25 23:19:54 INFO mapred.JobClient:  map 4% reduce 0%

とmap & reduceの処理が流れていきます。気長に待ちましょう。
処理が終わったら、td import:listで状況を見てみましょう。

td import:list
+---------------------------------------+-----------------+-----------+--------+---------+-------------+-------------+---------------+---------------+
| Name                                  | Table           | Status    | Frozen | JobID   | Valid Parts | Error Parts | Valid Records | Error Records |
+---------------------------------------+-----------------+-----------+--------+---------+-------------+-------------+---------------+---------------+
| favlook_fav_old_2013_10_25_1382661066 | favlook.fav_old | Ready     |        | 5451708 | 1438        | 0           | 2062874026    | 0             |
+---------------------------------------+-----------------+-----------+--------+---------+-------------+-------------+---------------+---------------+
1 rows in set

StatusがReadyになっています。では、確定してcommitしましょう。

td import:commit favlook_fav_old_2013_10_25_1382661066

すぐに処理が帰ってきましたが、状況を見てみると

td import:list
+---------------------------------------+-----------------+------------+--------+---------+-------------+-------------+---------------+---------------+
| Name                                  | Table           | Status     | Frozen | JobID   | Valid Parts | Error Parts | Valid Records | Error Records |
+---------------------------------------+-----------------+------------+--------+---------+-------------+-------------+---------------+---------------+
| favlook_fav_old_2013_10_25_1382661066 | favlook.fav_old | Committing | Frozen | 5451708 | 1438        | 0           | 2062874026    | 0             |
+---------------------------------------+-----------------+------------+--------+---------+-------------+-------------+---------------+---------------+
1 row in set

という状態で、commitにもしばらく時間が掛かるようです。
Frozenというのがよく分からないのですが、処理が一時停止しているのかと思い、「td import:unfreeze」コマンドを実行してみたのですがエラーとなってしまいました。
ひとまず状況が分からないのですが、Committingなのでしばらく放っておこうかと放置。

td import:list
+---------------------------------------+-----------------+-----------+--------+---------+-------------+-------------+---------------+---------------+
| Name                                  | Table           | Status    | Frozen | JobID   | Valid Parts | Error Parts | Valid Records | Error Records |
+---------------------------------------+-----------------+-----------+--------+---------+-------------+-------------+---------------+---------------+
| favlook_fav_old_2013_10_25_1382661066 | favlook.fav_old | Committed | Frozen | 5451708 | 1438        | 0           | 2062874026    | 0             |
+---------------------------------------+-----------------+-----------+--------+---------+-------------+-------------+---------------+---------------+
1 row in set

見てみると完了していました。Frozen、謎です。

ブラウザでアクセスできる管理画面からも、データが確認できるようになりました。
レコード数が20億6287万4026件、サイズが17.3 GB。
CSVでは82GB有りましたが、項目名が「Compressed Size」となっているように、内部では圧縮して持っているようです。
無料で使える150GBというのは、この圧縮状態を指すのでしょうか?


こうしてデータの準備ができました。
次に集計をやってみます。
(Jobを走らせることはできたのですが、結果の取得方法などがよく分かっていないので、まだ実験中)

2013/05/18

関西アンカンファレンスに参加しました #kansaiun

第3回関西アンカンファレンスに行ってきました。
当日は他の勉強会なども重なり、いろいろと大変でしたが、我も我もと発表枠がふさがり、かなり密度の濃いイベントになったかと思います。

わたしは、「ふぁぼ収集サービスのつらみ」と題して、公開しているサービス「ふぁぼるっく」の苦労話などをしてきました。


懇親会では、別の分野の方からも話を伺い、大変勉強になりました。
ちょっと作ってみたいものができました。
手の空いたときにでも、取りかかってみようかと思います。

次回も一年以内に開催されるようなので、是非参加したいです。
発表できるネタが生まれるような生活を送らないといけないなぁ。

2013/04/25

ふぁぼるっくのユーザー分布

ちょっと書かないと、すぐに月日が過ぎてしまう。
ということで、久々に新しいことをしたので記録。

ふぁぼるっくでは、ふぁぼを集めまくっているわけですが、たくさんふぁぼっている人はどのくらいふぁぼっているのか、調べてみた。
統計とか計算するのに、「R」というツールがいいらしい。
R言語でいろいろデータを操作したり、グラフを描いたりできるんだって。

Linux版のCUIでイマイチ使い方が分からなかったので、Windows版で。
よく分からないグラフが出来てしまった。
一部の人がふぁぼりまくっているからだ。
直近一週間のふぁぼりが100未満の人に絞ってみた。
対数グラフにしないと、曲線が極端すぎて、綺麗なグラフにならない。
結局は、受給曲線のように、ふぁぼりが少ないアカウントが大勢で、一部のアカウントだけがふぁぼりまくっているという状態だった。
ふぁぼ機能を知っている人は、ある程度ふぁぼっていて、山形なグラフになるかと思っていたが、そうでもなかったようだ。
「あなたのふぁぼりはこのへん」というグラフを表示したら面白いかなと思ったが、これでは面白くなさそうなのでやめた。

使用したデータは、以下の通り。

一週間のふぁぼ数アカウント数
03553073
199266
244782
327567
419471
514588
611361
79542
87720
96696
105764
114978
124395
133814
143505
153134
162876
172558
182402
192193
202008
211957
221794
231651
241550
251503
261411
271290
281108
291171
301091
311034
32971
33919
34874
35851
36795
37778
38748
39702
40673
41674
42586
43617
44563
45543
46536
47538
48476
49516
50488
51425
52448
53435
54438
55393
56391
57392
58374
59343
60350
61343
62348
63304
64357
65324
66286
67304
68267
69290
70282
71295
72245
73257
74248
75244
76234
77211
78209
79242
80213
81219
82226
83213
84210
85202
86213
87184
88186
89208
90173
91159
92177
93164
94163
95166
96152
97158
98145
99148
100157
101151
102154
103154
104135
105140
106137
107132
108143
109137
110113
111141
112127
113123
114123
115110
116108
117103
118124
119105
120122
121110
12296
123109
12497
125108
12692
12795
12899
129102
13088
13188
13295
13382
13495
13593
13681
13791
13878
13977
14085
14172
14281
14380
14485
14563
14671
14776
14877
14986
15073
15179
15275
15375
15474
15585
15669
15762
15873
15965
16077
16174
16262
16364
16475
16564
16671
16770
16843
16951
17064
17159
17261
17352
17464
17553
17648
17750
17874
17952
18051
18156
18253
18358
18435
18549
18664
18738
18847
18952
19047
19159
19249
19350
19444
19554
19647
19744
19838
19950
20038
20149
20249
20348
20430
20546
20639
20740
20833
20954
21051
21149
21244
21349
21433
21533
21639
21730
21841
21942
22053
22143
22240
22346
22434
22542
22640
22740
22841
22935
23032
23136
23244
23326
23436
23536
23630
23727
23835
23938
24032
24139
24232
24343
24437
24526
24635
24733
24828
24934
25037
25133
25237
25328
25422
25538
25631
25728
25827
25922
26024
26124
26218
26329
26422
26531
26628
26719
26834
26923
27025
27125
27225
27330
27422
27527
27628
27722
27822
27935
28022
28127
28228
28320
28424
28524
28614
28726
28825
28922
29020
29123
29219
29318
29427
29523
29617
29724
29812
29921
30017
30121
30221
30327
30424
30523
30613
30722
30826
30923
31024
31125
31226
31320
31412
31514
31614
31720
31815
31929
32019
32117
32219
32315
32422
32514
32616
32721
32812
32918
33014
33116
33215
33315
33420
33512
33618
33712
33815
33921
34020
34119
34221
34312
34415
34514
34623
34718
34821
34919
35016
35118
35224
35324
35412
35521
3569
35720
35816
35912
36019
3617
36213
36319
36422
36520
36614
36720
36814
36917
37010
37115
37217
37312
37411
37518
37614
37714
37811
37910
38012
38118
38217
38312
38414
38516
3869
3878
38810
38914
39017
39118
39210
3938
39415
39515
39618
39714
39813
39914
40010
40111
40216
4038
40410
40519
40611
4079
40822
40910
41011
41112
41215
41311
4148
4156
41615
4179
41814
4199
42012
42118
4229
4238
42418
42511
42614
42712
42812
42910
43015
4314
43211
43311
43411
4357
43611
43711
4389
4397
4406
44113
44211
44314
4449
44510
4467
44710
4488
4494
4507
45110
4523
45313
4547
45513
45616
4577
45814
4598
46014
46115
46214
46312
46414
4654
4669
4679
46813
4698
4706
47110
4726
4738
4749
4758
4768
47713
4787
4797
48012
4818
48210
4837
4849
48511
48611
4876
4887
4899
49014
4917
4926
4936
4944
49510
4968
49718
4985
4997
50010
50111
50211
50316
5049
5055
50613
50710
5087
5097
5106
5118
5128
51313
5148
5153
51614
5179
5188
5198
5218
5226
52311
5248
5256
52610
5274
52811
52913
5304
53110
5329
5338
53412
5357
53611
5378
53810
5397
5407
5415
54212
5433
5448
5456
5468
5476
54810
5495
5507
55111
5524
5537
55410
5554
5567
5574
5588
55910
56012
5617
5628
5635
5646
5658
5668
5676
56810
56910
5703
5715
57210
57311
5744
5758
5766
5777
5783
57910
5803
5812
5825
5837
5846
5856
5869
5877
5884
5895
5907
5914
5926
5933
5949
5954
5965
5979
5986
5997
6008
6016
6027
6033
6045
6055
6064
6077
6085
6091
6105
6115
61210
6137
6144
6158
6165
6178
6185
6197
6206
6215
6226
6236
62412
6255
6267
6277
6283
62913
6303
6315
6328
6339
6349
6357
6363
6376
6386
6397
6408
64110
6426
6435
6443
6455
6465
6474
6483
6497
65010
6518
6523
6534
6542
6554
6561
6571
6582
6597
6605
6618
6626
6637
6644
6659
6665
6674
6687
6699
6702
6715
6724
6735
6743
6754
6763
6776
6783
6793
6801
6816
6829
6833
6843
6855
6866
6875
6886
6896
6906
6917
6922
6935
6945
6956
6965
6975
6984
6993
7002
7016
7023
7033
7043
7054
7065
7074
7085
7095
7102
7114
7127
7133
7146
7155
7165
7174
7182
7195
7202
7211
7223
7232
7245
7252
7267
7271
7289
7294
7303
7318
7324
7336
7344
7355
7363
7371
7385
7393
7404
7411
7423
7434
7446
7456
7464
7476
7486
7496
7504
7513
7521
7533
7544
7554
7563
7578
7586
7595
7606
7612
7626
7631
7643
7656
7663
7676
7685
7699
7701
7714
7727
7737
7749
7753
7767
7775
7785
7796
7805
7815
7825
7838
7847
7851
7862
7874
7895
7908
7916
7929
7934
7944
7953
7965
7976
7983
7996
8002
8013
8026
8033
8041
8054
8064
8074
8082
8091
8101
8116
8122
8133
8141
8155
8162
8173
8192
8206
8214
8223
8234
8244
8251
8264
8276
8284
8292
8302
8313
8323
8333
8343
8352
8367
8377
8387
8391
8406
8411
8425
8434
8443
8452
8464
8471
8488
8495
8504
8513
8524
8533
8543
8553
8564
8574
8584
8591
8602
8615
8624
8637
8646
8651
8662
8674
8685
8691
8702
8716
8721
8732
8754
8766
8771
8782
8792
8803
8814
8822
8835
8843
8852
8862
8884
8894
8903
8912
8932
8943
8953
8962
8975
8981
8991
9004
9013
9025
9031
9042
9054
9062
9075
9087
9093
9101
9113
9123
9134
9142
9151
9163
9171
9185
9192
9201
9222
9233
9241
9252
9261
9272
9284
9291
9304
9313
9322
9333
9342
9352
9364
9372
9384
9393
9402
9414
9421
9432
9442
9452
9462
9471
9483
9493
9504
9511
9522
9533
9545
9552
9561
9573
9586
9596
9601
9611
9621
9644
9655
9663
9671
9683
9695
9704
9714
9721
9734
9743
9751
9761
9773
9782
9792
9815
9824
9831
9842
9852
9863
9872
9883
9894
9902
9913
9931
9945
9952
9965
9972
9982
9995
10002
10014
10024
10032
10044
10052
10063
10074
10082
10093
10101
10113
10121
10132
10153
10163
10173
10182
10192
10206
10211
10222
10236
10243
10252
10263
10271
10282
10295
10302
10312
10324
10343
10351
10372
10383
10392
10412
10421
10431
10442
10451
10463
10473
10481
10491
10502
10512
10524
10532
10544
10552
10566
10573
10582
10592
10602
10611
10623
10632
10645
10662
10672
10721
10732
10742
10752
10762
10773
10782
10794
10802
10811
10833
10843
10853
10864
10871
10881
10891
10902
10912
10922
10931
10942
10952
10962
10971
10982
10992
11021
11032
11052
11063
11093
11101
11112
11132
11141
11151
11161
11171
11181
11192
11214
11223
11232
11243
11253
11261
11275
11283
11304
11313
11323
11333
11341
11353
11361
11382
11393
11401
11422
11451
11462
11471
11481
11491
11501
11531
11541
11552
11561
11574
11585
11593
11612
11622
11635
11644
11654
11671
11682
11691
11702
11712
11725
11731
11771
11781
11793
11801
11811
11824
11831
11842
11854
11872
11881
11901
11912
11924
11933
11942
11952
11964
11972
11981
11993
12001
12012
12022
12031
12064
12071
12082
12093
12103
12122
12132
12145
12153
12162
12192
12214
12222
12232
12241
12251
12263
12271
12293
12301
12333
12342
12362
12374
12383
12393
12401
12421
12434
12443
12466
12472
12493
12502
12521
12562
12571
12581
12591
12602
12613
12623
12631
12642
12663
12675
12681
12693
12712
12732
12751
12772
12782
12791
12801
12812
12823
12831
12852
12861
12871
12901
12953
12961
12972
12982
12992
13002
13011
13023
13041
13062
13073
13081
13091
13112
13121
13131
13141
13163
13182
13202
13212
13222
13231
13242
13272
13281
13301
13311
13324
13331
13342
13352
13361
13371
13391
13402
13411
13434
13451
13461
13491
13515
13523
13531
13543
13551
13571
13581
13591
13602
13611
13621
13631
13641
13652
13671
13682
13691
13712
13732
13746
13764
13771
13792
13803
13822
13832
13841
13851
13871
13881
13903
13913
13922
13932
13952
13972
13982
13992
14001
14021
14042
14051
14061
14081
14092
14101
14112
14132
14141
14151
14175
14181
14192
14202
14212
14231
14241
14251
14271
14294
14301
14322
14331
14352
14361
14411
14441
14462
14472
14481
14512
14532
14542
14554
14571
14581
14592
14601
14621
14654
14671
14681
14691
14701
14722
14741
14752
14761
14772
14781
14832
14881
14901
14922
14931
14941
14951
14961
14971
14981
15001
15011
15021
15041
15052
15061
15092
15101
15121
15133
15151
15181
15201
15211
15221
15231
15242
15252
15271
15291
15302
15323
15351
15381
15391
15402
15411
15422
15431
15441
15451
15491
15511
15521
15531
15551
15561
15581
15591
15651
15661
15671
15681
15691
15701
15711
15721
15741
15751
15822
15834
15842
15852
15863
15871
15882
15891
15901
15924
15931
15941
15952
15972
15982
15992
16003
16011
16021
16034
16042
16062
16081
16092
16103
16161
16182
16202
16221
16231
16282
16331
16341
16353
16361
16371
16403
16411
16421
16463
16481
16491
16503
16512
16521
16531
16541
16572
16582
16591
16601
16622
16632
16641
16652
16681
16691
16711
16721
16731
16761
16771
16781
16791
16811
16822
16831
16842
16851
16862
16871
16912
16931
16951
16973
16981
17011
17022
17041
17072
17083
17091
17101
17111
17131
17141
17162
17181
17193
17211
17231
17252
17271
17282
17292
17302
17312
17321
17341
17362
17372
17381
17411
17421
17431
17441
17463
17471
17491
17501
17521
17531
17542
17601
17611
17622
17631
17641
17651
17671
17682
17702
17712
17741
17752
17761
17801
17811
17821
17841
17852
17871
17892
17901
17941
17951
17971
17981
17991
18011
18031
18051
18063
18071
18081
18101
18121
18131
18171
18181
18251
18261
18271
18302
18311
18382
18411
18421
18481
18491
18511
18531
18552
18582
18591
18602
18611
18621
18632
18651
18662
18671
18691
18701
18771
18782
18791
18813
18831
18841
18861
18891
18902
18911
18931
18941
18972
18981
18991
19011
19021
19041
19051
19071
19081
19112
19123
19161
19181
19191
19212
19221
19232
19251
19261
19282
19291
19311
19321
19341
19361
19382
19401
19441
19451
19482
19491
19581
19591
19631
19641
19681
19691
19702
19721
19741
19773
19802
19841
19862
19881
19901
19911
19921
19931
20021
20032
20041
20071
20091
20131
20151
20171
20241
20251
20261
20271
20291
20314
20332
20341
20362
20441
20511
20531
20552
20562
20571
20582
20593
20612
20621
20641
20653
20661
20671
20711
20723
20811
20842
20861
20892
20941
20951
20971
20992
21041
21051
21092
21101
21111
21121
21161
21181
21202
21212
21262
21281
21311
21321
21333
21392
21401
21431
21451
21471
21481
21501
21511
21522
21563
21571
21591
21641
21661
21672
21691
21702
21711
21731
21741
21751
21761
21771
21781
21792
21821
21861
21872
21892
21902
21923
21931
21963
22042
22061
22082
22111
22121
22141
22162
22182
22191
22212
22241
22301
22371
22412
22442
22451
22461
22551
22581
22591
22601
22614
22671
22691
22702
22751
22812
22821
22841
22891
22902
22911
22961
22991
23011
23081
23101
23132
23151
23221
23281
23301
23331
23371
23381
23391
23421
23431
23441
23481
23501
23551
23561
23581
23601
23631
23671
23691
23711
23741
23761
23841
23891
23921
23961
23971
24011
24041
24071
24121
24131
24152
24201
24261
24291
24341
24352
24391
24401
24491
24511
24522
24531
24562
24582
24591
24641
24761
24821
24842
24861
24871
24932
24971
24991
25011
25041
25061
25111
25121
25141
25171
25231
25292
25341
25371
25451
25471
25481
25511
25531
25551
25562
25621
25631
25661
25691
25751
25761
25801
25841
25861
25881
25901
25911
25931
25951
25971
26011
26101
26121
26171
26261
26271
26281
26301
26312
26323
26331
26342
26371
26382
26471
26481
26581
26671
26681
26751
26791
26811
26832
26862
26941
26951
27001
27061
27081
27101
27191
27201
27221
27251
27351
27371
27491
27601
27632
27641
27661
27671
27731
27861
27891
27921
27991
28031
28051
28081
28201
28511
28631
28651
28661
28711
28742
28781
28971
29041
29081
29281
29321
29341
29361
29381
29411
29461
29621
29711
29741
29881
29891
29901
29931
29991
30152
30191
30291
30301
30331
30381
30461
30541
30591
30601
30641
30661
30891
30911
30921
31011
31091
31121
31131
31141
31251
31441
31591
31691
31841
31851
32031
32101
32151
32371
32422
32521
32531
32561
32651
32701
32741
32772
32781
32841
32861
32891
32941
33121
33301
33321
33381
33481
33781
33912
33941
34021
34291
34741
34891
34941
34961
34991
35181
35191
35311
35321
35401
35641
35681
35842
35951
36001
36061
36131
36181
36211
36661
36672
36681
36821
36851
37031
37201
37241
37481
37711
37761
37771
38371
38381
38401
38641
38791
38941
39142
39161
39171
39461
39531
39552
39581
39691
39711
40242
40341
40461
40681
41061
41121
41161
41201
41211
41471
41581
41661
41801
41841
42001
42281
42631
42701
42791
42831
42841
42861
43071
43081
43651
43661
43701
43711
44001
44062
44111
44232
44311
44401
44591
44671
44711
45152
45191
45341
45421
46251
46281
46371
46381
46641
46851
47111
47741
48021
48051
48261
48461
48611
48661
48681
48771
48791
49051
49101
49591
50011
50581
50861
51281
52781
53291
53461
53481
53491
54871
56091
56981
57191
57361
59061
61601
61891
61961
62311
64001
65341
65871
66091
67261
67891
69501
72261
72551
72951
74911
75641
75971
80941
87381
88801
120591

広告