apache Ignite 實戰
apache Ignite 實戰
#安裝apache Ignite
1,下載
wget http://mirrors.tuna.tsinghua.edu.cn/apache//ignite/2.6.0/apache-ignite-fabric-2.6.0-bin.zip
2,解壓
unzip apache-ignite-fabric-2.6.0-bin.zip
3,進入目錄
cd /opt/tmp/apache-ignite-fabric-2.6.0-bin
4,啟動
bin/ignite.sh
這個時候應該報需要java環境,安裝jdk8-jdk9目前支援
下載jdk8直接解壓到指定目錄
5,設定jdk環境變數
vim /etc/profile
最後行加:`
export JAVA_HOME=/opt/tmp/jdk1.8.0_162
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
`6,使環境變數生效
source /etc/profile
啟動
bin/ignite.sh
成功啟動!
7,下載一個DBeaver隨便玩了
php+ignite
使用記憶體資料庫主要解決實際專案瓶頸結合專案語言研究php來操作:
- 配置php操作方案ODBC(庫名錶名都使用大寫);
吐槽,這csdn佔用關鍵字,不好用<bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration"> <!-- Enabling ODBC. --> <property name="odbcConfiguration"> <bean class="org.apache.ignite.configuration.OdbcConfiguration"/> </property> <!-- Configuring cache. --> <property name="cacheConfiguration"> <list> <bean class="org.apache.ignite.configuration.CacheConfiguration"> <property name="name" value="ALIPOS"/> <property name="cacheMode" value="PARTITIONED"/> <property name="atomicityMode" value="TRANSACTIONAL"/> <property name="writeSynchronizationMode" value="FULL_SYNC"/> <property name="queryEntities"> <list> <bean class="org.apache.ignite.cache.QueryEntity"> <property name="keyType" value="java.lang.Long"/> <property name="keyFieldName" value="sid"/> <property name="valueType" value="ALPSHOP"/> <property name="fields"> <map> <entry key="sid" value="java.lang.Long"/> <entry key="sname" value="java.lang.String"/> </map> </property> <property name="indexes"> <list> <bean class="org.apache.ignite.cache.QueryIndex"> <constructor-arg value="sname"/> </bean> </list> </property> </bean> </list> </property> </bean> </list> </property> </bean>
3.根據配置檔案啟動
./ignite.sh /opt/tmp/apache-ignite-fabric-2.6.0-bin/config/alipos-config.xml
4.安裝UNIXODBC
5.構建編譯igniteODBC
libtoolize && aclocal && autoheader && automake --add-missing && autoreconf
報錯提示需要更高版本
手動安裝相關版本
libtoolize && aclocal && autoheader && automake --add-missing && autoreconf
./configure --enable-odbc --disable-node --disable-core
make 提示
g++什麼語法錯誤
升級gcc版本
curl -Lks http://www.hop5.in/yum/el6/hop5.repo > /etc/yum.repos.d/hop5.repo
yum install gcc gcc-g++ -y
升級到4.8.2
make提示
AM_PROG_AR什麼鬼報錯
編輯/opt/tmp/apache-ignite-fabric-2.6.0-bin/platforms/cpp/configure.ac找到
AM_PROG_AR替換m4_pattern_allow([AM_PROG_AR], [AM_PROG_AR])
make沒報錯
make install 成功構建
安裝igniteODBC到ODBC
編輯$IGNITE_HOME/platforms/cpp/odbc/install/ignite-odbc-install.ini檔案,並且確保Apache Ignite段的Driver引數指向libignite-odbc.so所在的正確位置;
要安裝Ignite的ODBC驅動,可以使用如下的命令:
odbcinst -i -d -f $IGNITE_HOME/platforms/cpp/odbc/install/ignite-odbc-install.ini
,要執行這條命令,很可能需要root許可權。
執行成功檢視ODBC配置
odbcinst.ini已經配置
手動配置odbc.ini
[Ignite]
Description = Apache Ignite
Driver = Apache Ignite
測試:isql ignite
什麼鬼,又報錯undefined symbol: clock_gettime
編輯/opt/tmp/apache-ignite-fabric-2.6.0-bin/platforms/cpp/common/Makefile.am找到
libignite_common_la_LDFLAGS =
-no-undefined
-L/usr/local/lib
-ldl
下加-lrt
重新make clean
libtoolize && aclocal && autoheader && automake --add-missing && autoreconf
./configure --enable-odbc --disable-node --disable-core
make && make install
測試:isql ignite 成功
安裝php_odbc擴充套件
wget http://pecl.php.net/get/PDO_ODBC-1.0.1.tgz
tar -zxvf PDO_ODBC-1.0.1.tgz
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-pdo-odbc=unixODBC,/usr
make
該處報錯:/web/PDO_ODBC-1.0.1/pdo_odbc.c:34:1: 錯誤:未知的型別名‘function_entry’ function_entry pdo_odbc_functions[] = { ^/web/PDO_ODBC-1.0.1/pdo_odbc.c:35:2: 警告:標量初始化帶花括號 經查,是 function_entry的問題,修改 pdo_odbc.c中的程式碼,改為static const zend_function_entry
make
make install
在php.ini檔案新增下面一行
extension = “pdo_odbc.so”
重啟php-fpm
/opt/ngx/php/sbin/php-fpm: error while loading shared libraries: libsybdb.so.5: cannot open shared object file: No such file or directory
什麼鬼
yum install freetds
重啟php-fpm 正常
從 php.ini 檢查 pdo_odbc 是否安裝成功。
php程式碼測試:
try {
// dsn連線串
$dsn="odbc:Driver={Apache Ignite};ADDRESS=127.0.0.1:10800;CACHE=ALIPOS";
$dbh = new PDO($dsn);
// Changing PDO error mode.
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//$res = $dbh->query('SELECT * from ALPSHOP');
$dbs =$dbh->prepare('INSERT INTO ALIPOS.ALPSHOP (sid, sname) VALUES (?, ?)');
$sid = 1;
$sName = "Bond";
// Binding parameters.
$dbs->bindParam(1, $sid);
$dbs->bindParam(2, $sName);
// Executing the query.
$dbs->execute();
$ret=$dbh->query("select cast(1 as varbinary(max)) as col",PDO::FETCH_ASSOC);
if ($res == FALSE)
print_r("Exception");
// Printing results.
foreach($res as $row) {
//print_r($row);
}
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "\n";
die();
}
和windows效果一樣,增,刪,改,沒問題,查詢記憶體超出炒蛋。
直接使用odbc
cd /opt/tmp/php-5.5.38/ext/odbc
/usr/local/php/bin/phpize
sed -ri '[email protected]^ *test +"\$PHP_.*" *= *"no" *&& *PHP_.*=yes *[email protected]#&@g' configure
./configure --with-php-config=/opt/ngx/php/bin/php-config --with-unixODBC=/usr/local
make && make install
php程式碼直接測試
$conn=odbc_connect('Driver={Apache Ignite};ADDRESS=127.0.0.1:10800;CACHE=ALIPOS','','');
if (!$conn)
{
exit("lost " . $conn);
}
$sql="select cast(1 as varbinary(max)) as col";
$rs=odbc_exec($conn,$sql);
print_r($rs);
if (!$rs)
{
exit("SQL error");
}
什麼鬼,記憶體超出還是,
仔細看文件(官網已知bug,5.6以後版本修復?)
檢視ODBC原始碼,明顯拿不到欄位buf大小產生的錯誤,ignite原因?沒有賬號登陸提問,算了!
不活躍的專案慎用,呵呵~
沒關係,最主要開源,結合自己專案自己能改就行
下手修改php_odbc.c檔案
找到odbc_bindcols方法下
rc = PHP_ODBC_SQLCOLATTRIBUTE(result->stmt, (SQLUSMALLINT)(i+1), colfieldid,
NULL, 0, NULL, &displaysize);
#if defined(ODBCVER) && (ODBCVER >= 0x0300)
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO && colfieldid == SQL_DESC_OCTET_LENGTH) {
/* This is a quirk for ODBC 2.0 compatibility for broken driver implementations.
*/
charextraalloc = 1;
rc = SQLColAttributes(result->stmt, (SQLUSMALLINT)(i+1), SQL_COLUMN_DISPLAY_SIZE,
NULL, 0, NULL, &displaysize);
}
改為
rc = PHP_ODBC_SQLCOLATTRIBUTE(result->stmt, (SQLUSMALLINT)(i+1), colfieldid,
NULL, 0, NULL, &displaysize);
#if defined(ODBCVER) && (ODBCVER >= 0x0300)
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO && colfieldid == SQL_DESC_OCTET_LENGTH) {
/* This is a quirk for ODBC 2.0 compatibility for broken driver implementations.
*/
charextraalloc = 1;
rc = SQLColAttributes(result->stmt, (SQLUSMALLINT)(i+1), SQL_COLUMN_DISPLAY_SIZE,
NULL, 0, NULL, &displaysize);
}else if (displaysize<0) {
displaysize=256;
}
注:字串欄位沒有拿到欄位最大允許值時用256,意味著你的字串型別都限制了,可以根據需要修改大小。
重新編譯,測試正常
自此,php增刪改查ignite完全正常
下一步生產環境資料效能測試