NDB APIの実行環境

NDB APIの実行はSQLノードのmysqldと同じ位置づけとなる。
そのため、mgmサーバのconfig.iniにAPI実行用のノードを登録する必要がある。

ndb_mgmd config.ini

[ndb_mgmd]
hostname=localhost
datadir=/Users/sugino/my_cluster/ndb_data

[ndbd default]
datadir=/Users/sugino/my_cluster/ndb_data
NoOfReplicas=1

[ndbd]
hostname=localhost


[mysqld]
hostname=localhost

[mysqld]
hostname=localhost
NodeId=10

MySQL Cluster NDB APIのコンパイル環境

mysqlクラスタでは、mysqldを介さず直接ストレージエンジンNDBにアクセス可能なAPIが用意されている。一応、このネイティブインタフェースにより、マイクロミリ秒レベルのレイテンシーを実現とのことなので、本当かどうか調べてみようと思う。
開発言語がC++の場合は、ストレージエンジンNDBへ直接アクセスするNDB API
およびNDBマネージメントサーバにアクセスするMDB APIを使用する。
開発言語がJavaの場合は、ClusterJ/ClusterJPAが用意されている。

とりあえず、MySQLクラスタのソースツリーに含まれる以下のサンプルソースを使用して、
MAC上でNDB APIコンパイル環境を作成する。

$MYSQL_SRCHOME/storage/ndb/ndbapi-examples


手順はこのページを参考にした。
Chapter 2. The NDB API

cp -R $MYSQL_SRCHOME/storage/ndb/ndbapi-examples ~/src/mysqlapi
cd ~/src/mysqlapi/ndbapi-examples/ndbapi_simple 
  • acinclude.m4を作成する。
AC_DEFUN([WITH_MYSQL], [
  AC_MSG_CHECKING(for mysql_config executable)

  AC_ARG_WITH(mysql, [  --with-mysql=PATH path to mysql_config binary or mysql prefix dir], [
  if test -x $withval -a -f $withval
    then
      MYSQL_CONFIG=$withval
    elif test -x $withval/bin/mysql_config -a -f $withval/bin/mysql_config
    then
     MYSQL_CONFIG=$withval/bin/mysql_config
    fi
  ], [
  if test -x /usr/local/mysql/bin/mysql_config -a -f /usr/local/mysql/bin/mysql_config
    then
      MYSQL_CONFIG=/usr/local/mysql/bin/mysql_config
    elif test -x /usr/bin/mysql_config -a -f /usr/bin/mysql_config
    then
      MYSQL_CONFIG=/usr/bin/mysql_config
    fi
  ])

  if test "x$MYSQL_CONFIG" = "x"
  then
    AC_MSG_RESULT(not found)
    exit 3
  else
    AC_PROG_CC
    AC_PROG_CXX

    # add regular MySQL C flags
    ADDFLAGS=`$MYSQL_CONFIG --cflags`

    # add NDB API specific C flags
    IBASE=`$MYSQL_CONFIG --include`
    ADDFLAGS="$ADDFLAGS $IBASE/storage/ndb"
    ADDFLAGS="$ADDFLAGS $IBASE/storage/ndb/ndbapi"
    ADDFLAGS="$ADDFLAGS $IBASE/storage/ndb/mgmapi"

    CFLAGS="$CFLAGS $ADDFLAGS"
    CXXFLAGS="$CXXFLAGS $ADDFLAGS"

    #LDFLAGS="$LDFLAGS "`$MYSQL_CONFIG --libs_r`" -lndbclient -lmystrings -lmysys"
    #LDFLAGS="$LDFLAGS "`$MYSQL_CONFIG --libs_r`" -lndbclient -lmystrings"
    LDFLAGS="$LDFLAGS "`$MYSQL_CONFIG --libs_r`" -lndbclient "
    LDFLAGS="$LDFLAGS "`$MYSQL_CONFIG --libs_r`" -lndbclient "

    AC_MSG_RESULT($MYSQL_CONFIG)
  fi
])
  • confgure.in
AC_INIT(example, 1.0)
AM_INIT_AUTOMAKE(example, 1.0)
WITH_MYSQL()
AC_OUTPUT(Makefile)
bin_PROGRAMS = example
example_SOURCES = ndbapi_simple.cpp
-
  • 以下のコマンドを実行
touch NEWS README AUTHORS ChangeLog
aclocal
autoconf
automake -a -c
configure --with-mysql=$MYSQL_HOME
  • Makefileが生成され、makeを実行する
make 
  • 実行する
./exmaple
  • エラーが出る。
dyld: Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Users/sugino/src/mysqlapi/ndbapi-examples/ndbapi_simple/./example
  Reason: image not found
Trace/BPT trap: 5
  • .bash_profileのライブラリパスに以下を追加して解決
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/

MySQL Clusterインストール

MacOSMySQL Clusterをインストールする。
基本的にはLinuxのソースコンパイルによるインストールと同様の手順となる。

  • ソースをMySQL :: Download MySQL Clusterよりダウンロードする。Platformは「source code」を選択し、表示される中より「Generic Linux (Architecture Independent), Compressed TAR Archive」をダウンロードする。
  • 適当なディレクトリで解凍する。
  • コンパイルにはcmakeが必要となる。MacPortよりインストールする。
sudo port install cmake
sudo  cmake .
sudo make
sudo make install

macosにopenjdk1.7をインストールする

JDK1.7をMacにインストールしようとするが、現時点(2011/8/17)ではMacOS用にまだ正式リリースされていないので、OpenJDKをインストールする。

Javaだと簡単なサンプルを作るにもIDEがないと不便なことに気がつき、
NetBean7.0.1もインストールする。

IE9の過去のバージョンの互換モードで動作させるJavaScriptでも挙動が変わるものがある

MSDN Internet Explorer 9 Compatibility Cookbookより参照

IE8のドキュメント互換モードについて

  • IE8以降では、HTMLのメタタグを使用して互換モードを任意に指定することが可能。
 <meta http-equiv="X-UA-Compatible" content="IE=IE5" >

Defining document compatibility (Internet Explorer) | Microsoft Docs
2010 – IEBlog

IE6のドキュメント互換モードについて

  • デフォルトは"Quirks モード" で、IE6以前のバージョンのと同じように見えていた
  • IE6では標準モードも用意されており、 ディレクティブが含まれていれば標準モードで動作した
  • 大抵の(IEに特化した)業務アプリ系は、Quirksモードで動作していると思われる。