HANA是SAP推出的一款In-Memory数据库,能够既支持行式和列式存储,客户可以只有一份数据Copy就能够实现OLTP和OLAP的操作,尤其在OLAP场景下表现很强大。有兴趣的同学可以参考:https://www.sap.com/india/products/hana.html。
由于HANA是一个In-Memory数据库,所以对硬件的要求(特别是内存)非常高,一般的PC机上根本无法运行,不像传统的一些数据库。HANA一般都是只能在SAP认证的HANA服务器上运行,具体的认证服务器列表可以查看:https://www.sap.com/dmc/exp/2014-09-02-hana-hardware/enEN/appliances.html。
那么HANA如此高大上,一般的屌丝程序员可以玩吗?答案是Yes,屌丝程序员可以通过下面两种方法尝试HANA。
第一种方法:HANA Docker镜像
SAP发布了一个HANA Express Edition的Docker镜像,这个Express版本对硬件的要求相对来说不是很高,在PC机上就可以运行。具体如何在本地安装,可以参考这个Step-By-Step的教程(英文文档):https://developers.sap.com/tutorials/hxe-ua-install-using-docker.html。
下面是我如何利用HANA Docker镜像尝试HANA的步骤:
前提条件(包括本机环境)
步骤1,准备一个如下docker compose file
version: '3'
services:
hana:
container_name: express_edition
image: store/saplabs/hanaexpress:2.00.033.00.20180925.2
ports:
- 39013:39013
- 39017:39017
- 39041-39045:39041-39045
- 1128-1129:1128-1129
- 59013-59014:59013-59014
ulimits:
nofile:
soft: 1048576
hard: 1048576
sysctls:
kernel.shmmax: 1073741824
kernel.shmmni: 524288
kernel.shmall: 8388608
net.ipv4.ip_local_port_range: "40000 60999"
command: "--master-password HXEHana1 --agree-to-sap-license"
步骤二,启动docker
cd ${docker compose file directory}
docker-compose up
步骤三,打开一个新的控制台窗口,通过命令行连接HANA
C02WL71QHTD5:~ i321649$ docker exec -it express_edition bash //connect to HANA Express Edition docker shell
hxeadm@85b78d8a4f8d:/usr/sap/HXE/HDB90> whoami //print current user on docker shell
hxeadm@85b78d8a4f8d:/usr/sap/HXE/HDB90> HDB info //print HANA db running info
hxeadm@85b78d8a4f8d:/usr/sap/HXE/HDB90> hdbsql //run hdbsql client
hdbsql=> \h //help document
hdbsql=> \c -n localhost:39017 -u SYSTEM -p HXEHana1 //connect to SYSTEMDB
hdbsql SYSTEMDB=> select * from "SYS"."M_DATABASES" //list all the dbs
Note:HANA也支持标准的jdbc协议,所以也可以通过一些数据库客户端工具来操作HANA数据库,比如说DBeaver。
第二种方法:SCP上的HANA service
SAP在SAP Cloud Platform上把HANA暴露成了一个service(即是现在流行的Database as a Service),用户可以方便的直接在平台上subscribe这个服务,就可以使用,无需关注一些安装的细节。由于SCP上这个服务是收费的,如果只是想尝试一下,可以申请一个试用版本。如果你的公司有budget,可以申请一个SCP的正式账号,然后创建一个HANA service的instance。
下面是我如何用SCP Trial账号尝试HANA的步骤:
第一步,申请一个trial账号
第二步,Setup一个Cloud Foundry Trial环境,等setup好之后,进入这个Cloud Foundry Trial环境
第三步,在marketplace上找到SAP HANA Schema & HDI Container这个service,创建一个HANA instance。关于这个HANA service的具体信息及使用方式,可以查看这个service的documentation。
前面三步完成之后,意味着在一个共享的HANA数据库上成功的创建了一个HDI Container(类似于传统数据库schema的概念),接下来你就可以使用这个HANA数据库了,当然仅限于使用这个HDI Container。
那么怎么连接这个HANA数据库呢?下面演示以创建使用一个WISHLIST表为例。
第四步,在本地准备一个WISHLIST的目录
目录结构
src/
src/.hdiconfig
src/wishlist.table
manifest.yml
package.json
package.json
{
"name": "wishlist-deployer",
"dependencies": {
"@sap/hdi-deploy": "3.8.2"
},
"engines": {
"node": "8.15.1"
},
"scripts": {
"start": "node node_modules/@sap/hdi-deploy/"
},
"devDependencies": {}
}
manifest.yml
---
applications:
- name: wishlist-deployer
health-check-type: none
memory: 256M
buildpack: https://github.com/cloudfoundry/nodejs-buildpack
services:
- hana_db_trial
src/.hdiconfig
{
"file_suffixes" : {
"hdbtable" : {
"plugin_name" : "com.sap.hana.di.table",
"plugin_version" : "12.1.0"
},
"hdbrole": {
"plugin_name": "com.sap.hana.di.role",
"plugin_version": "12.1.0"
},
"hdbcds": {
"plugin_name": "com.sap.hana.di.cds",
"plugin_version": "12.1.0"
},
"hdbcalculationview" : {
"plugin_name" : "com.sap.hana.di.calculationview",
"plugin_version": "2.0.0.0"
}
}
}
src/wishlist.hditable
ROW TABLE WISHLIST (
ID
VARCHAR(255),
title
VARCHAR(255),
description
VARCHAR(255)
)
第五步,用cf命令行把上面这个nodejs应用部署到申请的Cloud Foundry Trial空间
cf push
第六步,在SCP上Enable SAP WebIDE,就可以利用WebIDE操作数据库
首先,切换到Neo Trail环境;
然后,找到WebIDE service激活;
最后,WebIDE service激活之后就可以使用了,连接到HANA,对WISHLIST表做CRUD操作。
References