事前に書き込むデータが決まっている場合(例えば、CSVからDBに入れる場合など)に早くする方法
一度In MemoryのSQLiteのDBを作成し、その中にデータを展開する
その後、SQLiteのBackupを使用して、DBの中身をファイルに書き出す
Rubyの場合は以下のサンプルコートが使える
http://www.rubydoc.info/github/luislavena/sqlite3-ruby/SQLite3/Backup
この方法は行数が多いデータ等には向いている
手元だと1500万レコードを追加するのに6時間ほどかかっていたのが
上記の方法を使って20分ほどに短縮することができた
要は、単純にdbへのwriteが遅かったってことだろうね
某バラエティ番組でこの話が出ていて、何も解説がされていなかったので。
ざっくりと言ってしまうと、CELPが使われているからってこと。
Mobile:CELP【しーいーえるぴー、せるぷ】
http://www.itmedia.co.jp/mobile/0307/30/n_keywords.html
技術の立場からすると、逆に「特徴的な声から作ってるんだよ」と言えれば、
一般のかたにもわかりやすい表現になるね。
git pullに関していろいろと調べてみると、あれこれと書かれてるんですが、
正直まどろっこしいというかややこしいというか…。
git-pullは幸い(?)なことにシェルスクリプトなので、
echoを入れてコマンド見れば良いんじゃないかなと思うんです。
ということで、主によく問題とされている以下の2点について調べてみました。
(本記事はgit version 1.9.5 (Apple Git-50.3)をベースとして記述しています)
以下のようなリポジトリ構成の場合、
git pullは以下の結果となる。
ここで注目するべきは2箇所。まず1つはgit-mergeの引数。
HEADにあるリビジョンをマージするから、 カレントのブランチにマージされるんです 。
git-pullのドキュメントにも
More precisely, git pull runs git fetch with the given parameters and calls git merge to merge the retrieved branch heads into the current branch.
となっている。
このことから、リモートブランチをpullすることを期待して、"git pull origin <branch>:<branch>"すると
カレントブランチにマージされてしまいます。
また、上記の事から"git pull"だけだとカレントブランチに対しての更新は、意図通りのものとなります。
もう1つはgit fetchの挙動。
git fetchはoriginのみを指定した場合は、originの追跡ブランチをすべて更新し、さらに追跡ブランチに対応するローカルブランチを更新します。
詳細な説明は以下のとおり。
When git fetch is run without specifying what branches and/or tags to fetch on the command line,
e.g. git fetch origin or git fetch, remote.<repository>.fetch values are used as the refspecs---they specify which
refs to fetch and which local refs to update.
The example above will fetch all branches that exist in the origin (i.e. any ref that matches the left-hand side of the value,
refs/heads/) and update the corresponding remote-tracking branches in the refs/remotes/origin/ hierarchy.
git fetchだけを試しにやってみると
の通り、fetchだけでdevelは更新されます。
このことから、git pullするとカレントブランチ以外の追跡ブランチも更新されることがわかります。
以下のページが分かりやすかったです。
追跡ブランチ (tracking branch) というブランチが何なのか調べた - snowlongの日記
[git]ローカルブランチがどのリモートブランチを追跡してるのか確認する方法 - dackdive's blog
git pullしても以下のエラーで更新されない場合、追跡ブランチに登録されていないです。
1$ git pull 2There is no tracking information for the current branch. 3Please specify which branch you want to merge with. 4See git-pull(1) for details 5 6 git pull <remote> <branch> 7 8If you wish to set tracking information for this branch you can do so with: 9 10 git branch --set-upstream-to=origin/<branch> devel
もし、リモートブランチが"origin"の場合、説明の通りにすればOK。
git branch --set-upstream-to=origin/devel devel
リビジョンはgit fetchした後の、.git/FETCH_HEADから取得します。
「not-for-merge以外のもの」(=カレントブランチ)がmergeするリビジョンになります。