はてなキーワード: Redisとは
アニメやゲームのキャラクター情報をまとめてるサイトがないから作りたいなぁって
思ってたんだけどhtmlは初歩しか分からないしプログラミングもできないので構想するだけで作れなかった。
ゼロから4ヶ月でWEBサービスをリリースした人の記事を見つけて「自分にもできるかな!」なんて思い挑戦してみたけど理解できず挫折・・・orz
それでもWEBサイトを作りたかったので制作会社に発注してみようと思い立った。
ただのキャラクターのデータベースだけではつまらないのでコミュニティ要素なども付けて
ネットで見つけた制作会社に見積もってもらうと下記のようになった。
合計1,483,125円
以前、SNS「ウェブカレ」のサイト制作費が1千万円で安く仕上がった(潰れたけど・・・)という話があったから
なんとなく3~400万くらいかかるんじゃないかなと不安だったんだけど予想より安い見積もりだったので、
このくらいの金額ならなんとか出せる!ということで制作してもらうことにしました。
本当は何社かに見積もってもらって比較しようと思ったんだけど面倒だったのでそのまま制作をお願いすることにした。
(最初はもう少し高かったけど機能の簡略化とオープンソースのライブラリを使用してもらう事で費用を抑えてもらった。)
去年の10月の頭くらいから打ち合わせを始めて第1フェーズでワイヤーフレーム作成と仕様策定をして第2フェーズのhtml、システム開発に
移ったのは中旬だったかな?その段階で前金で4割の580,650円を支払いました。
制作会社には3回くらい打ち合せに行って、あとはメールでやり取りしていました。
当初は12月中にリリースを予定してたんだけど、なんだかんだで伸びてあらかた出来上がったのが2月の中旬くらい。
ちなみに僕はヒッキー(どれくらいヒッキーかというと外出は3日に1回くらい)なので制作してもらっている間は
↓作ったサイト
サーバはさくらのVPS 8Gを使用。CentOS5の64bit
設定した項目は以下のとおり
HDDが3つあって、普通に/var/wwwにコンテンツを入れていくとHDDが溢れそうだったので、容量の大きいものを使うように工夫したりなど。
メモリもそこそこ積んであるサーバなので、mysql、php、apcに多めにメモリを割り当てる設定をした。
本当はmyISMやInnoDBエンジンでLIKE "%word%"のようなクエリーを投げて十分なパフォーマンスが出ればいいんですけどね。
それはムリなので、全文検索エンジンとしてgroongaを使用。
groongaを使用するために先にインストールしたのはこんな感じ
この時点でいざ、groonga!と思ってgroongaをインストールしようとすると競合を起こして入らない。
epel、remiレポジトリからインストールしてあったmysqlと衝突してたのでyum remove "mysql*"で
一旦mysqlを消して、groongaレポジトリからmysqlとgroongaをインストール。
するとgroongaは入ったものの、今度はphpから使おうとしてもphp-mysqlパッケージが入らない。
あちらを立てればこちらが立たぬ状態で本当にこまった。
どうしようもないので、やりたくないけどyum-downloadonlyを使ってパッケージに含まれる設定やら、soファイルなどを直接とってきて入れた。
mysql.so、mysqli.so、pdo_mysql.soを/usr/lib64/php/modules/にコピーしたり、設定をコピーしたり、少しずついじりながら、なんとか動いてくれた。
状態としてはmysqlとgroongaはgroongaレポジトリから、phpと本来php-mysqlパッケージでインストールされるmysql.soは手動で置いたことになる。
シェルから直接mysqlにログインするときはgroongaレポジトリのやつを、phpからmysqlを呼ぶときは手動で置いたmysql.soを使うことになっている。
ちょっと心境的にしんどい。別の方法があったかもしれないけど、調べても分からず結局1日くらいかかった。
アクセスは、サイト全体(トータル)、サイト全体(当日分)、各コンテンツ日別、各コンテンツ週間、各コンテンツトータルのアクセスをとるようにしています。
検討した候補はmemcaced、apc、mysql、redis、fileあたりなんですが、
fileは候補にあがったものの、メンドウ、、どうせなら楽な既製品がいい。と思って候補から外しました。
残るはmysqlかredisだけど、redisが高速って聞いていたのでredisにしてみました。
最初全部redisに入れて、集計した結果をmysqlに入れるつもりでしたが、週間ランキングなどはINSERT INTO .. DUPLICATE ONを使って、
アクセスした週の月曜日00:00:00のタイムスタンプとコンテンツIDをキーにしたレコードを作ればそのまま週間ランキングになるなー。と思ってmysqlを使っています。
コンテンツのトータルアクセス数もコンテンツのレコードにpvという項目をつくってUPDATE table SET pv=pv+1 WHERE id = ? のようにしました。
最初難しく考えていたけど、こうすることによって大分楽になったなーといった感じ。
全文検索エンジンや対話検索、ここにこのリンクがあればなぁ。。という所に何とかしてリンクを作るのが本当に大変だった。
使い勝手を良くするために、ここにこの機能をなど、さくっと思いつくのは簡単でもそれを実現するために、あーでもない、こーでもないと
DB・プログラムとにらめっこしながら「あ!こうすればできる!でもそうすると今度はこっちが・・・」みたいなのがあったりでとても大変だった。