Web

OVHカナダが遠くなった?

2017/9/1

低価格VPS比較 ~ OVH VPS SSD1プランを試す」で取り上げたOVH VPS(カナダ, Beauharnoisリージョン)を契約しています。

最近SSHで作業しているとやけにもたつくようになり、契約当初に確認した時よりRTTが大きくなっていることが分りました。最近引っ越して自宅のインターネット回線が変わったこともあり、ネットワーク経路を調べてみると、どうやら大西洋回りのルートとなっているようでした。RTTは300ms前後。

複数の回線の経路を調査してみたので、詳細は以下に。

Read more…

ServersMan@VPSからIDCFクラウドへ乗り換え

2017/3/30

以前に低価格帯VPSの比較記事を書きましたが、月額500円から使えると噂のIDCFクラウドを新たに試してみました。(3,000円分のトライアルクーポンがあったので。)
結論から言うと、かなり良さげだったので、ServersMan@VPSを解約してこちらに移行しました。

IDCFクラウドは、VPSではなくパブリッククラウドなので料金は構成次第ですが、

  • サーバー: Light.S1 (1CPU, 1GB) – 月額200円
  • ボリューム: 15GB – 月額300円

という構成で月額500円が実現できます。

料金ページや料金シミュレーションでは、ボリューム(ルートディスク)の下限は15GBとなっていますが、ISOからインストールを行えばそれ以下の容量も設定可能です。もう少し切り詰めれば、月額500円以下でも運用可能です。

ただ、格安運用しようと考えているなら、サーバーはLight.S1以外の選択肢はないので、CPUやメモリの制約を考慮して用途を選ぶべきです。また、グローバルIPアドレスは1個だけ無料なので(マシン単位ではなく仮想ルータ単位で付与される)、IPアドレスが欲しい場合はServersMan@VPSが良いかも知れません。

(追記) ネットワーク転送量は従量料金な(10円/GB)ので、無料分3,240GB/月を超過することが予想される場合は注意が必要です。

以下、適当にベンチマーク結果を貼っておきます。
※ 東日本リージョン2 Light.S1

Read more…

低価格VPS比較 ~ OVH VPS SSD1プランを試す

2016/10/11

このブログやお遊びWebサービスは、メモリ2GBぐらいのプランを1台契約して突っ込んでいたのですが、コストが年間1万円オーバーなので、節約のために格安のServersman@VPS Entryプラン(メモリ1GB)に移行してみました。しかし、データベースをごりごり使うアプリを動かすと、やはりメモリ1GBでは厳しいことが分かりました。そこでスペックと安さを両立させるために、国内にこだわらず、海外の格安VPSを契約してみました。

ベンチマークを交えて、これまで使っていたVPSについて比較・考察したいと思います。

Read more…

一つのカラムに貼られた複数のFULLTEXT INDEXを使い分ける

2015/7/26

Mroongaでお手軽全文検索して遊んでいたんですが、前方一致を使う場合は

Qiita: mroongaでgroongaの前方一致検索を使うには

にあるように、パーサーを無効にしないと期待した結果が得られません。

一つのカラムに対して、普通に全文検索する場合と前方一致検索を使い分けたい場合には、上記記事のように2つカラム用意してそれぞれにパーサーを使ったFULLTEXT INDEXと、無効にしたFULLTEXT INDEXを貼らなきゃいけないのでしょうか。
ちょっと無駄な感じがしましてどうにかできないかな~と。

そこで思いついたのが、USE INDEXとかで明示的にインデックスを指定してやったらどうなるのでしょうか。
そんでリファレンスを見てみると・・・

MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.2.9.3 インデックスヒントの構文

「自然言語モードの検索の場合、インデックスヒントは暗黙のうちに無視されます。」
を読んで、ダメか~と思ったのですが、
「ブールモードの検索の場合、FOR ORDER BY または FOR GROUP BY を含むインデックスヒントは暗黙のうちに無視されます。FOR JOIN を含むインデックスヒント、または FOR 修飾子を含まないインデックスヒントは受け付けられます。」
ということらしいのでIN BOOLEAN MODEであれば、FOR {ORDER|GROUP} BYを除き、使えるっぽいですね。

ということで試してみましょう。

サンプルとして使うスキーマとデータは以下の通り。

CREATE TABLE test (
  id int(11) NOT NULL AUTO_INCREMENT,
  content varchar(255) NOT NULL COLLATE 'utf8_unicode_ci',
  PRIMARY KEY (id),
  FULLTEXT INDEX idx_content (content),
  FULLTEXT INDEX idx_content_off (content) COMMENT 'parser "off"'
) ENGINE=mroonga COMMENT = 'engine "InnoDB"' DEFAULT CHARSET=utf8;
INSERT INTO test (content) VALUES ('とらっく');
INSERT INTO test (content) VALUES ('とらっくばっく');
INSERT INTO test (content) VALUES ('東京都');
INSERT INTO test (content) VALUES ('京都');

まずはインデックスを指定せず前方一致検索をしてみます。

SELECT * FROM `test` WHERE MATCH(content) AGAINST('とらっく*' IN BOOLEAN MODE)

検索結果は空でした。EXPLAINしてみると、使用されたのはidx_contentが使われていたので、正しい結果です。

お次はUSE INDEXでパーサを無効にしたidx_content_offを指定してみます。

SELECT * FROM `test` USE INDEX (idx_content_off) WHERE MATCH(content) AGAINST('とらっく*' IN BOOLEAN MODE)

すると、以下のような結果が得られました。
idx_content_offが使用され、意図した前方一致検索が行われているようです。

|2|とらっくばっく
|1|とらっく

ということで、USE INDEXを使うことで、異なるパーサを用いたFULLTEXT INDEXを使い分けすることができますね。

FuelPHP MigrationでMroongaのラッパーモードを利用する

2015/6/11

FuelPHPのマイグレーションでMroongaのラッパーモードを利用したテーブルを作成する方法です。
備忘録として書いておきます。

Mroongaのラッパーモードを利用するには、テーブルオプションを ENGINE = Mroonga COMMENT = 'engine "InnoDB"' のように指定する必要があります。

DBUtil::create_table メソッドの第5引数 $engineでストレージエンジンの指定は可能なのですが、コメントの指定をどうしようかと悩んでいました。
create_tableメソッドのソースを読んでみると、$engineはエスケープなども行われずにそのまま文字列結合しているようなので、COMMENTも一緒にぶち込むことにしました。
見た目は良くないですが、Coreを拡張するのも面倒なので…

class Create_test
{
	public function up()
	{
		\DBUtil::create_table('test', array(
			'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true, 'unsigned' => true),
			'content' => array('constraint' => 255, 'type' => 'varchar'),
		), array('id'), false, "Mroonga COMMENT  = 'engine \"InnoDB\"'", 'utf8mb4_general_ci');

		\DBUtil::create_index('test', 'content', 'idx_content', 'fulltext');

	}

	public function down()
	{
		\DBUtil::drop_table('test');
	}
}

他に良い方法があれば是非教えてくださいー