extremeDB使用例子

extremeDB使用例子
extremeDB使用例子

来一份eXtremeDB使用笔记.

1、准备工作:下载eXtremeDB安装包(https://www.360docs.net/doc/7a3123484.html,/)然后将安装或解压至磁盘。此时可以看到其目录下有host、include、platform和target等目录。

2、用你喜欢的文本编辑器构建一数据库结构,文本内容如下:(举例说明,保存文件名为test.mco)

#define int1 signed<1>

#define int2 signed<2>

#define int4 signed<4>

#define int8 signed<8>

#define uint8 unsigned<8>

#define uint4 unsigned<4>

#define uint2 unsigned<2>

#define uint1 unsigned<1>

// db over shm memory test

declare database shmdb; //数据名字

compact class MyClass //表名字

{

unsigned<4> id;

string str1;

char<20> str2;

unique tree pkey; //索引

};

3、用host in目录里的mcocomp.exe程序在DOS命令行模式下将test.mco编译生成,用法如:

》mcocomp test.mco

编译成功后将会生成shmdb.h和shmdb.c文件。当然了,可以根据需要生成所需的文件,具体请见mcocomp命令的参数(mcocomp -help)。至此,生成的文件里就含有数据库操作所需要API函数了。

4、新建一控制台程序工程为shmdb,在链接库里加上mcolib_shm.lib(此处为共享内存LIB库),此处需要注意LIB的路径,最简单的办法就是将eXtremeDB的库文件拷贝至工程目录下包含其就可以了。

5、将编译生成的shmdb.h和shmdb.c添加至此工程中。然后新建一C文件shmdemo.c(当然了,也可以是.cpp文件),下面将分别讲解shmdemo.c文件代码。先看此文件的全部代码:

/*标准库*/

#include /*ctype.h*/

#include /*stdlib.h*/

#include /*stdio.h*/

#include /*string.h*/

#include "shmdb.h" /*用mcocomp生成的shmdb.h文件*/

const char * dbname = "demoShmDb"; //DB名称

const int SEGSZ = 1024 * 1024 * 10; //10M大小的数据库

const uint2 PAGESIZE = 90; //页面大小

const int MAP_ADDRESS = 0x20000000; //内存地址

void SH(void) {

char text[] = {

"

This sample demonstrates eXtremeDB shared memory interfaces

"

};

char text1[] = {

"Copyright (c) 2001-2005 McObject LLC. All Right Reserved.

"

};

printf("%s

eXtremeDB runtime version %d.%d, build %d

%s

Press Enter to start",

text, MCO_COMP_VER_MAJOR, MCO_COMP_VER_MINOR, MCO_COMP_BUILD_NUM,text1); getchar();

}

static int askNumber(const char *prompt) {

char buf[300];

printf("

%s ", prompt);

fgets(buf, sizeof (buf), stdin);

if(isdigit(buf[0]))

return atoi(buf);

return -1;

}

/*16进制转换成10进制*/

static int hex2num(const char *s) { unsigned int a = 0;

while(*s) {

int n;

if( *s >= '0' && *s <= '9' )

n = *s - '0';

else if( *s >='a' && *s <= 'f')

n = *s - 'a' + 10;

else if( *s >='A' && *s <= 'F')

n = *s - 'A' + 10;

else return a;

a = (a << 4) | n;

s++;

}

return a;

}

static int askHex(const char *prompt) { char buf[300];

printf("

%s ", prompt);

fgets(buf, sizeof (buf), stdin);

return hex2num(buf);

}

/*插入记录*/

static void insertRec(mco_db_h db) { MyClass c;

MCO_RET rc;

mco_trans_h t;

int id;

char str1[100], str2[100];

id = askNumber("Enter new record's id:";

mco_trans_start( db, MCO_READ_WRITE, MCO_TRANS_FOREGROUND,

&t ); //事务start

MyClass_new(t, &c); //新建一条记录

sprintf(str1,"String1: %d", id);

sprintf(str2,"String2: %d", id);

MyClass_id_put(&c,(uint4)id); //插入

MyClass_str1_put(&c, str1, (uint2)strlen(str1) );

MyClass_str2_put(&c, str2, (uint2)strlen(str2) );

rc = mco_trans_commit(t); //事务commit

if(rc==MCO_S_OK)

printf("

insert done for %d (%s, %s)

",(int)id,str1,str2);

else

printf("

insert failed (%d) for %d (%s, %s)

",rc,(int)id,str1,str2);

}

/*删除记录*/

static void deleteRec(mco_db_h db) {

MyClass c;

MCO_RET rc;

mco_trans_h t;

int id;

char str1[100]= {0}

, str2[100]= {0};

id = askNumber("deleting record, Enter record's id:";

mco_trans_start( db, MCO_READ_WRITE, MCO_TRANS_FOREGROUND, &t ); rc = MyClass_pkey_find(t, (uint4)id, &c); //通过索引查找id

if(rc != MCO_S_OK) {

printf("

Record with id = %d not found

", (int)id);

mco_trans_rollback(t); //如果没有找到回滚

return;

}

MyClass_str1_get(&c,str1,(uint2)sizeof(str1),0);

MyClass_str2_get(&c,str2,(uint2)sizeof(str2) );

rc = MyClass_delete(&c);

if(rc == MCO_S_OK)

rc = mco_trans_commit(t);

else

mco_trans_rollback(t);

if(rc==MCO_S_OK)

printf("

delete done for %d (%s, %s)

",id,str1,str2);

else

printf("

delete failed (%d) for %d (%s, %s)

",rc,id,str1,str2);

}

/*查找记录*/

static void searchRec(mco_db_h db) {

MyClass c;

MCO_RET rc;

mco_trans_h t;

int id;

char str1[100]= {0}

, str2[100]= {0};

id = askNumber("searching record, Enter record's id:";

mco_trans_start( db, MCO_READ_ONLY, MCO_TRANS_FOREGROUND, &t ); rc = MyClass_pkey_find(t, (uint4)id, &c); //通过索引查找id

if(rc != MCO_S_OK) {

printf("

Record with id = %d not found

", id);

mco_trans_rollback(t);

return;

}

MyClass_str1_get(&c,str1,(uint2)sizeof(str1),0);

MyClass_str2_get(&c,str2,(uint2)sizeof(str2) );

mco_trans_rollback(t);

printf("

record found: %d (%s, %s)

",id,str1,str2);

}

/*显示数据库中的记录信息*/

static void listRecs(mco_db_h db) {

MyClass c;

MCO_RET rc;

mco_trans_h t;

uint4 id;

char str1[100]= {0}

, str2[100]= {0};

mco_cursor_t csr;

mco_trans_start( db, MCO_READ_ONLY, MCO_TRANS_FOREGROUND, &t ); /*用游标的方法遍历数据*/

MyClass_pkey_index_cursor( t, & csr );

rc = mco_cursor_first(t, &csr); //置游标为第一条记录

printf("

----------- All records of type MyClass: --------

" );

/*遍历数据库*/

for( ; rc == MCO_S_OK; rc = mco_cursor_next(t, &csr) ) {

rc = MyClass_from_cursor(t, &csr, &c);

if(rc) {

printf("

Unexpected error %d

",rc); break;

}

MyClass_id_get(&c, &id);

MyClass_str1_get(&c,str1,(uint2)sizeof(str1),0);

MyClass_str2_get(&c,str2,(uint2)sizeof(str2) );

printf("record: %7d (%s, %s)

",(int)id,str1,str2);

}

printf( "------------------------ end of list ------------

";

mco_trans_rollback(t);

}

/*数据库操作选择*/

static void menu( mco_db_h db ) {

char ibuf[300];

int ch; // menu choice

for(;{

printf("

----------------------------

Menu:

"

"0: exit

"

"1: insert a record

"

"2: delete a record

"

"3: search a record

"

"4: list records

"

"5: print db statistics

"

"$ "

);

fgets(ibuf, sizeof (ibuf), stdin);

if( ! isdigit( ibuf[0] ) )

continue;

ch = atoi(ibuf);

switch(ch) {

default:

break;

case 0:

return;

case 1:

insertRec(db); break;

case 2:

deleteRec(db); break;

case 3:

searchRec(db); break;

case 4:

listRecs(db); break;

case 5:

{

uint4 freepg, totalpg, nused;

mco_db_free_pages (db, &freepg); //求数据库剩余空间大小mco_db_total_pages (db, &totalpg); //求数据库总大小

nused = totalpg - freepg;

printf("

Memory:

"

" %dKb available, %dKb used

",

(int)(freepg * PAGESIZE / 1024), (int)(nused * PAGESIZE / 1024) ); //求最后大小需要乘以页面大小

}

break;

}

} // end for

}

/*出错处理*/

static void errhandler( int n ) {

printf( "

eXtremeDB fatal error: %d", n );

getchar();

exit( -1 );

}

/*主程序*/

int main( int na, char **aa) {

MCO_RET rc;

mco_db_h db; //数据库句柄

void * start_mem = 0;

char prompt[300], buf[100];

mco_runtime_info_t info; //数据库信息

SH();

mco_get_runtime_info( &info); //获取可运行数据库信息

if ( !info.mco_shm_supported ) { //是否有多线程支持

printf("

This program requires shared memory database runtime

";

exit(1);

};

mco_runtime_start(); //初始化运行环境

/* set fatal error handler */

mco_error_set_handler( &errhandler );

printf("

Would you like to create a new database [Y] or attach [N] -- [Y/N] ?" );

fgets(buf, sizeof (buf), stdin);

if(buf[0] == 'y' || buf[0] == 'Y') {

sprintf(prompt,"Enter hint address (default is %x):",

(int) MAP_ADDRESS );

start_mem = (void*) askHex(prompt);

if( start_mem == 0 )

start_mem = (void*) MAP_ADDRESS;

printf("

SHM Map address is %x

", (int) start_mem );

/*创建数据库*/

/*MCO_RET mco_db_open( IN const char * dbname, IN mco_dictionary_h dict, IN void * mem, IN uint4 total_size, IN uint2 page_size)*/

/*参数: */

/* dbname 要打开的数据库名。*/

/* h_dict eXtremeDB模式处理器创建的字典句柄。通常,传递该句柄时传递

dbname_getDictionary()函数。*/

/* mem 用于容纳数据库的已分配堆内存。*/

/* total_size mem指向的内存的数量,以字节为单位。*/

/* page_size 不连续的内存块,这些块由eXtremeDB页管理器来管理。*/

/*说明:

/* 该函数在mem表示的空间中创建数据库dbname,*/

/* 并指定初始尺寸为total_size(数据库的尺寸是可以扩展的),*/

/* 页尺寸为page_size。*/

/* 返回值:*/

/* MCO_S_OK 数据库创建成功。*/

/* MCO_E_PAGESIZE 非法页尺寸。*/

/* MCO_E_NOMEM MCO_E_INSTANCE_DUPLICATE */

/* 数据库实例重复。*/

/* MCO_ERR_DB_VER_MISMATCH */

/* MCO_ERR_DB_NOMEM */

/* MCO_ERR_DB_NAMELONG */

/* MCO_ERR_DB_NUM_INSTANCES */

/* MCO_ERR_DB MCO_ERR_PGMEM*/

rc = mco_db_open( dbname, shmdb_get_dictionary(), start_mem, SEGSZ, PAGESIZE ); if ( rc ) {

printf("

Could not create instance: %d

", rc);

exit( 1 );

}

}

/*连接数据库*/

/*MCO_RET mco_db_connect( IN const char * dbname, OUT mco_db_h *handle) */

/*参数: */

/* dbname 要连接的数据库名称,该名称与调用 mco_db_open时指定的名称相同*/ /* handle 指向数据库句柄的指针,该函数将填充该句柄*/

/* 说明:*/

/* 该函数将应用程序(线程)连接到数据库。数据库必须已经由mco_db_open函数打开过。函数返回一个连接句柄,该句柄可以作为数据库的引用传给其它接口函数。 */

/* 返回值:*/

/* MCO_S_OK 成功建立数据库连接。*/

/* MCO_E_NOINSTANCE */

/* MCO_ERR_TRN*/

rc = mco_db_connect( dbname, &db );

if ( rc ) {

printf("

Could not attach to instance: %d

", rc);

exit( 1 );

}

menu( db );

// shutdown

rc = mco_db_disconnect( db ); //断开连接

rc = mco_db_close( dbname ); //关闭数据库

mco_runtime_stop(); //释放

return 0;

}

6、需要注意的几点问题:

一、如果初始化环境出错,将访问内存地址改大一些就可以了(特别在WIN XP上);

二、如果出现插入记录失败,查找是不是插入重复的ID了;

三、打开或创建数据库失败,查找是不是之前已经打开相同的数据库了,如果是创建数据库的话,最好在此之前加一函数mco_db_kill(db_name);

四、如果创建数据库失败,需要查看LIB库和用mcocomp编译出来的.h和.c文件的版本是否一致。一定要保证所使用的版本一致!

preprocessor

_CRT_SECURE_NO_DEPRECA TE

WIN32

_DEBUG

_CONSOLE

Ihe vaule

_VC80_UPGRADE=0x0600

_MBCS

Additional dependencies

mcouwrt_debug.lib

mcolib_debug.lib

mcovtmem_debug.lib

mcomconv_debug.lib

mcotmursiw_debug.lib

mcosw32n_debug.lib

嵌入式Linux操作系统中eXtremeDB使用指南

一、eXtremeDB开发过程

l 1、定制数据库

通过文本编辑器编辑范式文件(.mco)

通过范式编译器编译方式文件产生数据库接口(.h)

l 2、调用eXtremeDB接口及C、C++接口编写应用程序

l 3、C/C++编译器编译应用程序

l 4、应用程序与数据库运行时(eXtremeDB内核)链接为可执行程序

二、eXtremeDB使用实例:

l1、解压文件:tar ?Cxzvf extremedb.tar.gz,下载相对应eXtremeDB版本地址:(https://www.360docs.net/doc/7a3123484.html,/developer-zone/developer-zone.asp)

l2、用你喜欢的文本编辑器构建一数据库结构,文本内容如下:(保存文件名为test.mco)

l #define int1 signed<1>

#define int2 signed<2>

#define int4 signed<4>

#define int8 signed<8>

#define uint8 unsigned<8>

#define uint4 unsigned<4>

#define uint2 unsigned<2>

#define uint1 unsigned<1>

declare database simpledb; //数据库名字

compact class MyClass //表名字

{

unsigned<4> id;

string str1;

char<20> str2;

unique tree pkey; //索引

};

3、用host\bin目录里的mcocomp程序将test.mco编译,用法如:mcocomp test.mco

编译成功后将会生成simpledb.h和simpledb.c文件。当然了,可以根据需要生成所需的文件,具体请见mcocomp命令的参数(mcocomp -help)。至此,生成的文件里就含有数据库操作所需要API函数了。

4、新建一名为simpletest.c文件,源程序如下:

#include /*ctype.h*/

#include /*stdlib.h*/

#include /*stdio.h*/

#include /*string.h*/

#include "simpledb.h" /*用mcocomp生成的shmdb.h文件*/

const char * dbname = "demoShmDb"; //DB名称

const int SEGSZ = 1024 * 1024 * 10; //10M大小的数据库

const uint2 PAGESIZE = 90; //页面大小

const int MAP_ADDRESS = 0x20000000; //内存地址

static void errhandler( int n ) { /*出错处理*/

printf( "\neXtremeDB fatal error: %d", n );

getchar();

exit( -1 );

}

/*插入记录*/

static void insertRec(mco_db_h db, int id) {

MyClass c;

MCO_RET rc;

mco_trans_h t;

char str1[100], str2[100];

sprintf(str1,"String1: %d", id);

sprintf(str2,"String2: %d", id);

mco_trans_start( db, MCO_READ_WRITE, MCO_TRANS_FOREGROUND, &t ); //事务start

MyClass_new(t, &c); //新建一条记录

MyClass_id_put(&c,(uint4)id); //插入id

MyClass_str1_put(&c, str1, (uint2)strlen(str1) );

MyClass_str2_put(&c, str2, (uint2)strlen(str2) );

rc = mco_trans_commit(t); //事务commit

if(rc==MCO_S_OK)

printf("\ninsert done for %d (%s, %s)\n",(int)id,str1,str2);

else

printf("\ninsert failed (%d) for %d (%s, %s)\n",rc,(int)id,str1,str2);

}

/*删除数据*/

static void deleteRec(mco_db_h db, int id) {

MyClass c;

MCO_RET rc;

mco_trans_h t;

char str1[100]= {0} , str2[100]= {0};

mco_trans_start( db, MCO_READ_WRITE, MCO_TRANS_FOREGROUND, &t ); rc = MyClass_pkey_find(t, (uint4)id, &c); //通过索引查找id

if(rc != MCO_S_OK) {

printf("\nRecord with id = %d not found\n", (int)id);

mco_trans_rollback(t); //如果没有找到回滚

return;

}

MyClass_str1_get(&c,str1,(uint2)sizeof(str1),0);

MyClass_str2_get(&c,str2,(uint2)sizeof(str2) );

rc = MyClass_delete(&c); //删除记录

if(rc == MCO_S_OK)

rc = mco_trans_commit(t);

else

mco_trans_rollback(t);

if(rc==MCO_S_OK)

printf("\ndelete done for %d (%s, %s)\n",id,str1,str2);

else

printf("\ndelete failed (%d) for %d (%s, %s)\n",rc,id,str1,str2); }

/*查找记录*/

static void searchRec(mco_db_h db,int id) {

MyClass c;

MCO_RET rc;

mco_trans_h t;

char str1[100]= {0}

, str2[100]= {0};

mco_trans_start( db, MCO_READ_ONL Y, MCO_TRANS_FOREGROUND, &t ); rc = MyClass_pkey_find(t, (uint4)id, &c); //通过索引查找id

if(rc != MCO_S_OK) {

printf("\nRecord with id = %d not found\n", id);

mco_trans_rollback(t);

return;

}

MyClass_str1_get(&c,str1,(uint2)sizeof(str1),0);

MyClass_str2_get(&c,str2,(uint2)sizeof(str2) );

mco_trans_rollback(t);

printf("\nrecord found: %d (%s, %s)\n",id,str1,str2);

}

/*显示数据库中的记录信息*/

static void listRecs(mco_db_h db) {

MyClass c;

MCO_RET rc;

mco_trans_h t;

uint4 id;

char str1[100]= {0} , str2[100]= {0};

mco_cursor_t csr;

mco_trans_start( db, MCO_READ_ONL Y, MCO_TRANS_FOREGROUND, &t ); /*用游标的方法遍历数据*/

MyClass_pkey_index_cursor( t, & csr );

rc = mco_cursor_first(t, &csr); //置游标为第一条记录

printf("\n----------- All records of type MyClass: -------- \n" );

/*遍历数据库*/

for( ; rc == MCO_S_OK; rc = mco_cursor_next(t, &csr) ) {

rc = MyClass_from_cursor(t, &csr, &c);

if(rc) {

printf("\nUnexpected error %d\n",rc); break;

}

MyClass_id_get(&c, &id);

MyClass_str1_get(&c,str1,(uint2)sizeof(str1),0);

MyClass_str2_get(&c,str2,(uint2)sizeof(str2) );

printf("record: %7d (%s, %s)\n",(int)id,str1,str2);

}

printf( "------------------------ end of list ------------ \n");

mco_trans_rollback(t);

}

int main( int na, char **aa) {

MCO_RET rc;

mco_db_h db; //数据库句柄

void * start_mem = 0;

mco_runtime_info_t info; //数据库信息

mco_get_runtime_info( &info); //获取可运行数据库信息

if ( !info.mco_shm_supported ) { //是否有共享内存支持

start_mem = (void *)malloc(SEGSZ);

}

else{

start_mem = (void*) MAP_ADDRESS;

}

mco_runtime_start(); //初始化运行环境

/* 设置错误处理*/

mco_error_set_handler( &errhandler );

/*创建数据库*/

rc = mco_db_open( dbname, simpledb_get_dictionary(), start_mem, SEGSZ, PAGESIZE );

printf("\nCould not create instance: %d\n", rc); exit( 1 );

}

/*连接数据库*/

rc = mco_db_connect( dbname, &db );

if ( rc ) {

printf("\nCould not attach to instance: %d\n", rc); exit( 1 );

}

insertRec(db,1); //插入数据1

insertRec(db,2); //插入数据2

insertRec(db,3); //插入数据3

listRecs(db); //显示所有数据

searchRec(db,2); //查找数据2

deleteRec(db,1); //删除数据1

listRecs(db); //显示所有数据

rc = mco_db_disconnect( db ); //断开连接

rc = mco_db_close( dbname ); //关闭数据库mco_runtime_stop(); //结束

drozer使用详解

Mercury(Android APP 应用安全评估) Mercury 是一款优秀的开源Android APP应用安全评估框架,它最赞的功能是可以动态的与android设备中的应用进行IPC(组件通信)交互。 一、安装与启动 1. 安装 (1)windows安装 第一步:下载Mercury 2.2.2 (Windows Installer) 第二步:在Android设备中安装agent.apk adb install agent.apk (2)*inux安装(Debian/Mac) apt-get install build-essential python-dev python-setuptools #以下步骤mac也适合 easy_install --allow-hosts https://www.360docs.net/doc/7a3123484.html, protobuf==2.4.1 easy_install twisted==10.2.0 (为了支持Infrastructure模式) wget https://www.360docs.net/doc/7a3123484.html,/assets/415/mercury-2.2.2.tar.gz tar zxvf mercury-2.2.2.tar.gz easy_install mercury-2.0.0-py2.7.egg 2. 启动 有三种方式 (1)USB方式的 第一步:在PC上使用adb进行端口转发,转发到Mercury使用的端口31415 adb forward tcp:31415 tcp:31415 第二步:在Android设备上开启Mercury Agent 选择embedded server-enable

zheng-环境搭建及系统部署文档20170213(三版)

1Een 项目描述 基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构:内容管理系统(门户、博客、论坛、问答等)、统一支付中心(微信、支付宝、在线网银等)、用户权限管理系统(RBAC细粒度用户权限、统一后台、单点登录、会话管理)、微信管理系统、第三方登录系统、会员系统、存储系统 https://www.360docs.net/doc/7a3123484.html,/zhengAdmin/src/ 2项目组织结构

3项目模块图 4项目使用到的技术4.1后端技术 Spring Framework SpringMVC: MVC框架

Spring secutity|Shiro: 安全框架 Spring session: 分布式Session管理MyBatis: ORM框架 MyBatis Generator: 代码生成 Druid: 数据库连接池 Jsp|Velocity|Thymeleaf: 模板引擎ZooKeeper: 协调服务 Dubbo: 分布式服务框架 TBSchedule|elastic-job: 分布式调度框架Redis: 分布式缓存数据库 Quartz: 作业调度框架 Ehcache: 缓存框架 ActiveMQ: 消息队列 Solr|Elasticsearch: 分布式全文搜索引擎FastDFS: 分布式文件系统 Log4J: 日志管理 Swagger2: 接口文档 sequence: 分布式高效ID生产 https://www.360docs.net/doc/7a3123484.html,/yu120/sequence AliOSS|Qiniu: 云存储 Protobuf|json: 数据传输 Jenkins: 持续集成工具 Maven|Gradle: 项目构建管理

GoogleProtoBuf开发者指南

ProtoBuf开发指南 - 非官方不完整版 这个文档用于指导开发的,属于非官方发布版本进行选译的,并不完整。供参考使用。 1 概览 欢迎来到protocol buffer的开发者指南文档,一种语言无关、平台无关、扩展性好的用于通信协议、数据存储的结构化数据串行化方法。 本文档面向希望使用protocol buffer的Java、C++或Python开发者。这个概览介绍了protocol buffer,并告诉你如何开始,你随后可以跟随编程指导 ( https://www.360docs.net/doc/7a3123484.html,/apis/protocolbuffers/docs/tutorials.html )深入了解protocol buffer编码方式 ( https://www.360docs.net/doc/7a3123484.html,/apis/protocolbuffers/docs/encoding.html)。API 参考文档 ( https://www.360docs.net/doc/7a3123484.html,/apis/protocolbuffers/docs/reference/overview .html )同样也是提供了这三种编程语言的版本,不够协议语言 ( https://www.360docs.net/doc/7a3123484.html,/apis/protocolbuffers/docs/proto.html )和样式( https://www.360docs.net/doc/7a3123484.html,/apis/protocolbuffers/docs/style.html )指导都是编写 .proto 文件。 1.1 什么是protocol buffer ProtocolBuffer是用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构。 1.2 他们如何工作 你首先需要在一个 .proto 文件中定义你需要做串行化的数据结构信息。每个ProtocolBuffer信息是一小段逻辑记录,包含一系列的键值对。这里有个非常简单的 .proto 文件定义了个人信息: message Person { required string name=1; required int32 id=2; optional string email=3; enum PhoneType {

数据库实例

1 创建学生表stu 属性说明类型长度约束Sno学号字符串6主键Sname姓年字符串8非空Age年龄整型 sex性别字符串2 bplace籍贯字符串20 属性说明类型长度约束cno课程号字符串6主键cname课程名称字符串8非空credit学分整型 属性说明类型长度约束tno教师号字符串6主键tname教师名字符串8非空Age年龄整型 ps职称字符串2

7、找出3 个学分的课程号和课程名。 8、查询年龄大于22 岁的学生情况。 9、找出籍贯为河北的男生的姓名和年龄。 10、找出年龄在20 ~23 岁之间的学生的学号、姓名和年龄,并按年龄升序排序 11、找出年龄小于23 岁、籍贯是湖南或湖北的学生的姓名和性别。 12、找出学生表中籍贯是空值的学生的姓名和性别。 13、找出成绩为95 分的学生的姓名。 14、找出成绩在90 分以上的学生的姓名。 15、查询全部学生的学生名和所学课程号及成绩。 16、找出籍贯为山西或河北,成绩为90 分以上的学生的姓名、籍贯和成绩。 17、查出课程成绩在80 分以上的女学生的姓名、课程名和成绩。 18、查询各课程的学时数。 19、找出教师的最小年龄。 20、统计年龄小于等于22 岁的学生人数。 21、找出学生的平均成绩和所学课程门数。 22、找出年龄超过平均年龄的学生姓名。 23、找出各课程的平均成绩,按课程号分组,且只选择学生超过3 人的课程的成绩。 24、查询没有选任何课程的学生的学号和姓名。 25、查询哪些课程只有男生选读。 26、要求给出一张学生、籍贯列表,该表中的学生的籍贯省份,也是其他一些学生的籍贯省份。 27、找出选修了全部课程的学生的姓名。 28、列出全部教师的姓名及其任课的课程号、班级。

Ubuntu14.04的caffe编译及安装

Caffe Caffe CaffecuDNNAlexNetK40 1.17ms. Caffe BSD-2

sudo apt-get install build-essential # sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libop encv-dev libhdf5-serial-dev protobuf-com sudo apt-get install --no-install-recommends libboost-all-dev CUDA7.5 Nvidia Ubuntudeb , sudo dpkg -i cuda-repo-ubuntu1404-7-5-local_7.5-18_amd64.deb sudo apt-get update

sudo apt-get install cuda sudo ldconfig /usr/local/cuda/lib64 660 sudo apt-get install nvidia-cuda-toolkit sudo apt-get install nvidia-352 sudo reboot Atlas sudo apt-get install libatlas-base-dev pythonpipeasy_install wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py sudo python ez_setup.py --insecure wget https://bootstrap.pypa.io/get-pip.py sudo python get-pip.py python sudo apt-get install libblas-dev liblapack-dev libatlas-base-dev gfortr an python-numpy

sql数据库示例-适合初学者说课讲解

一、数据库概述 数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合。(文件系统) 数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据。 数据库软件应该为数据库管理系统,数据库是通过数据库管理系统创建和操作的。 数据库:存储、维护和管理数据的集合。 二、数据库的安装与配置 * 安装 * 参照图解 * 一路下一步 * 配置 * 参照图解 * 到选择字符集时停 登录Mysql: mysql -u root -p abc * 卸载 1.停止mysql服务net stop mysql 启动mysql服务net start mysql 2.卸载mysql 3.找到mysql 安装目录下的my.ini datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/" * 修改密码 运行cmd * 安装成功了打开cmd --> mysql -uroot -p你的密码 * 修改mysql root用户密码 1) 停止mysql服务运行输入services.msc 停止mysql服务 或者cmd --> net stop mysql 2) 在cmd下输入mysqld--skip-grant-tables 启动服务器光标不动(不要关闭该窗口) 3) 新打开cmd 输入mysql -u root -p 不需要密码

comake使用详解

Comake2使用详解 1、适用用户范围: 第一次使用comake2工具 使用comake2搭建环境:这时用户不需要关心COMAKE文件细节,和第一次使用comake2工具时的情形差不多,第一次使用comake2工具初始化环境 $mkdir --parent ps/se/ac/make $cd ps/se/ac/make $comake2 -S $comake2 -UB comake2 -S //初始化COMAKE文件 comake2 -S表示从平台最新基线版本获取依赖列表;comake2 -S -r 1.0.1.0表示从平台1.0.1.0版本获取依赖列表友情提示:如果你的代码库里已有COMAKE文件,可跳过这一步;如果你的模块路径是ps/se/ac/make,请cd ps/se/ac/make再执行comake2 -S命令 comake2 -UB //下载并编译依赖代码 2、comake2命令 $ comake2 -h comake[com make]能够自动帮助用户搭建环境,并且生成Makefile工具. 程序会读取目录下面的COMAKE文件,产生Makefile和环境.用户需要提供这个COMAKE文件. 参数: -h --help 查看帮助 -D --debug 开启debug选项[默认不打开].-D -D可以查看更多调试信息. -S --scratch 创建一个默认的COMAKE文件 -r --revision 从平台检出模块cvspath指定的TAG对应的依赖列表,配合-S使用,如-S -r 1.0.0.0 -E --export-configs 导出模块的4位版本依赖,存放在COMAKE.CONFIGS下面.比如-E public/ub@1.0.0.0 -W --watch-configs 查看本地依赖模块.-W -W可以查看模块引入来源.-W -W -W可以查看依赖模块的依赖. -I --import-files 在解释COMAKE文件之前导入模块 -C --change directory 切换到directory下面执行[默认当前目录] -Q --quiet 安静模式[默认不打开] -U --update-configs 更新环境 -B --build-configs 构建环境 -F --force 构建环境时强制进行[默认不进行] -e --export-local-configs 导出本地环境到CONFIGS.SCM文件 -f --scmfile= 重现编译环境 -d --devdiff 存在本地修改的共同开发依赖列表(多模块共同开发时适用) -J --make-thread-number= 如果模块使用COMAKE生成的Makefile的话,编译线程数[默认是4] -j --modules-thread-number= 并发下载、编译模块的线程数[默认是1] -K --keep-going 构建/更新环境中途出错的话,忽略错误继续[已废弃] -P --pretreatment 生成Makefile时不进行预处理[默认进行预处理] -O --quot-all-deps 生成Makefile时引用所有头文件依赖[默认过滤目录外依赖]

Protobuf编码详解

prtotocol buffer是google于2008年开源的一款非常优秀的序列化反序列化工具,它最突出的特点是轻便简介,而且有很多语言的接口(官方的支持C++,Java,Python,C,以及第三方的Erlang, Perl等)。本文从protobuf如何将特定结构体序列化为二进制流的角度,看看为什么Protobuf如此之快。 一,示例 从例子入手是学习一门新工具的最佳方法。下面我们通过一个简单的例子看看我们如何用protobuf 的C++接口序列化反序列化一个结构体。 1,编辑您将要序列化的结构体描述文件Hello.proto 每个结构体必须用message来描述,其中的每个字段的修饰符有required, repeated和optional 三种,required表示该字段是必须的,repeated表示该字段可以重复出现,它描述的字段可以看做C语言中的数组,optional表示该字段可有可无。 同时,必须人为地为每个字段赋予一个标号field_number,如上图中的1,2,3,4所示。更详细的proto文件的编写规则见这里。 2,用protoc工具“编译”Hello.proto protoc工具使用的一般格式是: protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/xxx.proto 其中SRC_DIR是proto文件所在的目录,DST_DIR是编译proto文件后生成的结构体处理文件的目录 之后会生成对结构体Hello.proto中描述的各字段做序列化反序列化的类 3, 编写序列化进程https://www.360docs.net/doc/7a3123484.html,

我们用set方法为结构体中的每个成员赋值,然后调用SerializeToOstream将结构体序列化到文件log中。 并编译它: 4,编写反序列化进程https://www.360docs.net/doc/7a3123484.html, 用ParseFromIstream将文件中的内容序列化到类Hello的对象msg中。 并编译它: , 5,做序列化和反序列化操作 上面只是一个简单的例子,并没有对protobuf的性能做测试,protobuf的性能测试详见这里。

一个完整的数据库示例--说明

一、表的结构及完整性约束 新建一个数据库jxsk,包括S、C、SC、T、TC五个表,结构如下:C表: S表: SC表: T表:

TC表: 二、安全性控制及视图机制 1、三类角色:depart、teacher、student depart的权限: teacher的权限:

student的权限: 2、有2个院系用户:d_jsj,d_xx,同属于depart角色。

有1个教师用户:t ,属于teacher 角色。

有一个学生用户:s,属于student角色。 3、创建计算机系教师视图t_view_jsj、计算机系学生视图s_view_jsj,并授予d_jsj 用户在这两个视图上的select、delete、update、insert权限。 计算机系教师视图t_view_jsj: create view t_view_jsj as select tno,tn,sex,age,prof,sal,comm,dept from t where dept='计算机' with check option

授予d_jsj用户在计算机系教师视图t_view_jsj 上的select、delete、update、insert 权限: grant select,update,delete,insert on t_view_jsj to d_jsj 计算机系学生视图t_view_jsj: create view s_view_jsj as select sno,sn,sex,age,dept,resume,native from s where dept='计算机' with check option 授予d_jsj用户在计算机系学生视图s_view_jsj 上的select、delete、update、insert 权限: grant select,update,delete,insert on s_view_jsj to d_jsj …… 4、创建一个视图,显示学号,姓名,院系,课程名,成绩。 create view score_view(学号,姓名,院系,课程名,成绩) as select s.sno,sn,dept,cn,score from s,sc,c where s.sno=sc.sno and https://www.360docs.net/doc/7a3123484.html,o=https://www.360docs.net/doc/7a3123484.html,o 三、完整性控制--触发器、规则 1、要求当删除C表中某课程信息时,同时删除SC和TC中与此课程相关的记录。create trigger c_delete_trigger on c after delete as delete from sc where cno in (select cno from deleted) delete from tc where cno in (select cno from deleted) go

Ubuntu下安装Caffe

Ubuntu下安装Caffe 安装需要的软件: 1. Ubuntu14.0.4 2. cuda-repo-ubuntu1504-7-5-local_7.5-18_amd64 3. caffe-master 安装Ubuntu的过程在这里不做介绍。系统安装好了之后,执行下面的操作。 在线安装的步骤,在此之前将更新源换成163的,下载速度会快很多: 1. sudo apt-get update 2. sudo apt-get upgrade 以上更新系统相关软件 3. sudo apt-get install build-essential 4. sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev 5. sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler 6. sudo apt-get install libatlas-base-dev python-dev vim 以上为在线安装的依赖项需要按顺序执行 7. 切换到cuda安装包的目录下,执行sudo dpkg -i cuda-repo-ubuntu1504-7-5- local_7.5-18_amd64 8. sudo apt-get update 9. sudo apt-get install -y cuda 以上为安装CUDA驱动。(Nvidia驱动在这个过程也会自动装好) 10. vim ~/.bashrc 11. 按i进入编辑状态,将光标移到最下面一行。输入export PATH=/usr/local/cuda- 7.5/bin:$PATH 12. 输入export LD_LIBRARY_PATH=/usr/local/cuda- 7.5/lib64:$LD_LIBRARY_PATH,按:wq保存并退出 13. source ~/.bashrc 以上为配置环境变量 14. 将下载好的caffe源文件解压缩,即caffe-master然后切到那个目录中执行cp Makefile.config.example Makefile.config 15. vim Makefile.config 16. 按i进入编辑状态,修改:CUDA_DIR :=/usr/local/cuda-7.5 17. 如果使用了MATLAB或者Python需要按照Makefile.config文件中的提示在 Makefile.config进行相应的路径修改即可。 以上为配置Caffe相关路径 18. make all 19. make test 20. make runtest

数据库应用系统实例

淮海工学院计算机工程学院实验报告书 课程名:数据库原理及应用 题目:实验七数据库应用系统实例 班级:D计算机081 学号: 姓名:

一、实验目的 开发学生学籍管理系统小型数据库应用系统数据库连接、数据操程作序编写,熟练使用Microsoft Visual Studio 2005开发平台。 二、实验内容和要求 1.后台为SQL server2000, 2.前台为面向对象编程语言(可选择) 3.完成数据库连接 4.完成对前面实验所建立的studb109学籍数据库中的数据通过应用系统界面进行更新和查询等操作。 三、实验步骤和实验结果 1.连接SQL Server的数据库访问编程实例。编写一个应用程序来连接数据库名为studb109的SQL Sever数据库,并根据连接结果输出一些信息。 (1).运行Microsoft V isual Studio 2005 (2).新建网站

(3).设计网站 using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using System.Data.SqlClient; namespace web { public partial class_Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e){} protected void Button1_Click(object sender, EventArgs e) {try {SqlConnection coon = new SqlConnection(); coon .ConnectionString =" Server =localhost; uid = sa;pwd=; database=studb109"; coon .Open (); Label1 .Text ="连接成功"; } catch { Label1 .Text ="连接失败"; }}}}

Unity3D客户端和Java服务端使用Protobuf

Unity3D客户端和Java服务端使用Protobuf 本文测试环境: 系统:WINDOWS 7(第3、6步)、OS X 10.9(第4步)软件:VS 2012(第3、6步)、Eclipse(第5、6步) 硬件:iPad 2(第4步)、Macbook Pro Mid 2012(第4步)文章目录: 1、关于Protobuf的C#实现 2、为什么有些Protobuf发布到iOS就用不了,甚至有些在PC都用不了? 3、手动处理C#版本的Protobuf 3.1、创建一个C#工程,先手动创建每一个要通过Protobuf序列化或反序列化的数据模型类,然后导出dll 3.2、创建一个用于序列化的C#工程,然后运行生成dll 3.3、将上面两个工程生成的dll拖到unity中 4、在Unity中反序列化Protobuf 5、服务端Java也用Protobuf 6、太烦了?!客户端也要自动处理Protobuf1、关于Protobuf 的C#实现 首先,U3D里面Protobuf使用的是C#的实现,那么目前有几个可选的C#实现:

C#: https://www.360docs.net/doc/7a3123484.html,/p/protobuf-csharp-port C#: https://www.360docs.net/doc/7a3123484.html,/p/protosharp/ C#: https://https://www.360docs.net/doc/7a3123484.html,/protobuf/ C#/.NET/WCF/VB: https://www.360docs.net/doc/7a3123484.html,/p/protobuf-net/我这里选用的是https://www.360docs.net/doc/7a3123484.html,/p/protobuf-net/(你可以在 https://https://www.360docs.net/doc/7a3123484.html,/p/protobuf-net/downloads/list 这里下载到他的代码和工具),它比较好的一点是,提供了各种平台的支持,解压后在“Full”目录中可以看到各个平台的支持看到里面的unity了吗,它里面的protobuf-net.dll将是我们准备用到的。2、为什么有些Protobuf发布到iOS就用不了,甚至有些在PC都用不了? a、Protobuf使用了JIT,即在运行时动态编译,而这个特性在Unity发布到iOS时候是不支持的。因此,会导致你在PC 上可以正常运行,发布到iOS就有问题。 b、Protobuf是基于.net 2.0以上框架写的,而Unity仅支持.net 2.0,或者有些使用2.0中比较多的特性,而你在Unity 中发布设置了.net 2.0的子集。后者你只需要在Player setting中修改设置就可以了。 上面两项也可适用于其它第三方类库,如果你自己下载了一个在PC上或C#里面能正常使用的类库,在U3D里面就不能用了,那么请检查是否是上面两条原因导致的。3、手动

简单数据库设计实例

数据库设计实例 数据库设计是数据库应用系统设计的一个组成部分,其核心是针对于特定的应用环境,设计合理的数据模型,创建数据库及其应用系统,使之能够有效地存储和处理数据,以满足用户的应用需求。从实用角度出发,数据库设计可分为如下几个步骤: 第一步:创建概念数据模型 确定实体和关系 确定属性 规范化数据 第二步:生成物理数据模型 第三步:验证设计 为便于学习者理解和掌握,下面结合具体的实例来讲解和展示数据库设计的详细过程。假定我们要开发一个小型的ERP系统,以管理公司内部资源,其应用业务场景描述如下: v512工作室由IT业界专业人士组成,在提供高端IT培训业务的同时,还自主制作并免费发布大量公益性学习资源,工作室以公司形式运营,目前共拥有18名员工,这些员工分属于4个部门,且员工之间存在上下级管理关系。计划将来根据业务的发展设立更多的部门,聘用更多的员工。为保证质量,工作室对其成员的各项专业技能进行了级别评定。 8.5.1 确定实体和关系 1. 确定高级别的活动 要确定本ERP系统数据库设计中的实体和实体间关系,首先应明确要基于该数据库执行的高级别活动,这里所谓的高级别活动是指从用户的视角出发,确定本数据库设计中系统所涉及到的业务活动。比如,存储和维护员工的个人信息等。 在前述的应用业务场景中,v512工作室需要考虑的高级别活动包括: -聘用新员工 -解雇现有员工 -维护员工的个人信息

-增设新部门 -裁撤现有部门 -维护部门信息 -维护工作室业务相关的技能信息 -维护各员工的业务技能掌握情况 2. 确定实体 接下来要确定的是,针对上述的高级别活动需要记录和维护有关哪些事物的信息,这些事物将被转换为实体。其中,员工相关信息可抽象为“Employee”实体、部门相关信息可抽象为“Department”实体、技能相关信息抽象为“Skill”实体,为规范和方便起见,这些实体均采用英文命名,并尽量在名称中体现其含义。 3. 确定关系 进一步对上述高级活动进行分析,以确定实体间存在何种关系。具体包括: -Employee-Department实体之间存在隶属关系 员工必须且只能隶属于某一个特定的部门,一个部门可以包含0~多名员工,此为一对多关系。 这种从两个方向上对同一个关系的细化描述被称为关系的角色,每个关系都对应两种角色。 -Employee-Department实体之间存在管理关系 每一名员工可以管理0~1各部门,每个部门必须由一名员工负责管理(其管理者不必须隶属于本部门),此为一对一关系。 -Employee-Skill实体之间存在掌握关系 每一名员工均应掌握1~多项业务技能,每项技能可能被0~多名员工掌握,此为多对多关系。 -Employee-Employee实体之间存在管理关系 每位员工由0~1位上级员工负责管理,有的员工可能没有上司(比如公司经理),但有的话只能有一位直接上级。上级员工可以管理0~多位为下级员工。 经分析而得的上述实体间关系如图8-14所示。

分布式数据库原理及应用实验10-redis与hbase安装

《分布式数据库原理及应用》 实验报告 实验10:redis与hbase安装

一、实验目的 1.掌握redis与hbase的特点。 2.掌握redis与hbase的安装。 二、实验环境 操作系统自定 三、实验内容与实验过程及分析(写出详细的实验步骤,并分析实验结果) 实验内容: 1.梳理mongodb,neo4j,memcache,redis,hbase的异同 2.完成redis的安装与测试 3.完成hbase的安装与测试 实验步骤: 1.梳理mongodb,neo4j,memcache,redis,hbase的异同 Redis 所用语言:C/C++ 特点:运行异常快使用许可: BSD 协议:类 Telnet 有硬盘存储支持的内存数据库 Master-slave复制 虽然采用简单数据或以键值索引的哈希表,但也支持复杂操作。 Redis支持事务,支持哈希表,支持排序sets,支持队列(阻塞/非阻塞),支持将数据设置成过期数据(类似快速缓冲区设计) Pub/Sub允许用户实现消息机制。最佳应用场景:适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。 例如:股票价格、数据分析、实时数据搜集、实时通讯。 Master-slave复制:如果同一时刻只有一台服务器处理所有的复制请求,这被称为Master-slave复制,通常应用在需要提供高可用性的服务器集群。 MongoDB 所用语言:C++ 特点:保留了SQL一些友好的特性(查询,索引) 使用许可: AGPL(发起者: Apache)协议: Custom binary( BSON) Master/slave复制(支持自动错误恢复,使用 sets 复制)内建分片机制 支持javascript表达式查询可在服务器端执行任意的 javascript函数 update-in-place支持比CouchDB更好。在数据存储时采用内存到文件映射对性能的关注超过对功能的要求建议最好打开日志功能(参数–journal) 最佳应用场景:适用于需要动态查询支持;需要使用索引而不是 map/reduce功能;需要对

SQL-Server数据库设计的案例分析

数据库设计的案例分析 一、教学管理 1. 基本需求 某学校设计学生教学管理系统。学生实体包括学号、姓名、性别、生日、民族、籍贯、简历、登记照,每名学生选择一个主修专业,专业包括专业编号和名称,一个专业属于一个学院,一个学院可以有若干个专业。学院信息要存储学院号、学院名、院长。教学管理还要管理课程表和学生成绩。课程表包括课程号、课程名、学分,每门课程由一个学院开设。学生选修的每门课程获得一个成绩。 设计该教学管理的ER模型,然后转化为关系模型。 若上面的管理系统还要管理教师教学安排,教师包括编号、姓名、年龄、职称,一个教师只能属于一个学院,一名教师可以上若干门课程,一门课程可以有多名老师来上,每个教师所上的每门课都有一个课堂号和课时数。试修改上题的ER模型,将教师教学信息管理增加进去。

2. 参考设计: 图一教学管理ER图 由ER模型转换的关系模型是: 学生(学号,姓名,性别,生日,民族,籍贯,专业号,简历,登记照)专业(专业号,专业,专业类别,学院号) 学院(学院号,学院,院长) 课程(课程号,课程名,学分,学院号) 成绩(学号,课程号,成绩) (题目分析:本题中有学生、专业、学院、课程四个实体。一个学生只有一个主修专业,学生与专业有多对一的联系;一个专业只由一个学院开设,一门课程只由一个学院开设,学院与专业、学院与课程都是一对多的联系;学生与课程有多对多的联系。 在转换为关系模型时,一对多的联系都在相应的多方实体的关系中增加一个

外键。) 增加教师,ER图如下。 图二有教师实体的教学管理ER图 3. 物理设计 基于Access的数据库结构设计如下。 指定数据库文件的名称,并为设计好的关系模型设计表结构。 数据库文件保存在“E:\教学管理\”文件夹中,数据库文件名:教学管理.MDB。 表包括:学院、专业、学生、课程、成绩单。对应表结构如表1-2至表1-6所示。 表1-1 学院 字段名类型宽度小数主键/索引参照表约束Null值学院号文本型 2 ↑(主) 学院文本型16 院长文本型8 √ 表1-2 专业 字段名类型宽度小数主键/索引参照表约束Null值

win7离线安装tensorflow和keras

Win7_64离线安装tensorflow+keras 亲测安装成功 1. 安装Anaconda 安装包选择:Anaconda3-4.2.0-windows-x86_64(内置python3.5编译环境) 安装目录:C:\ Anaconda3。 注意最后应将路径加入Path的选项勾上,否则可能会导致无法启动Anaconda。 安装好后要检查一下python是否正确使用。如果设置环境变量后仍不能正常使用,则重新安装Anaconda3-4.2.0-windows-x86_64。 2. 下载并解压protoc- 3.1.0-win32,将bin文件夹中的protoc.exe拷贝到C:\windows\system32中; 3.进入到C:\Anaconda3\Lib\site-packages目录下,新建tensorflow文件夹用来存放tensorflow 的安装文件; 4. 下载并解压protobuf-3.1.0.tar,将解压后的文件protobuf-3.1.0拷贝到新建的tensorflow 文件夹中,并且将protoc.exe文件拷贝到protobuf-3.1.0\src文件中; 5. 通过cmd命令进入到protobuf-3.1.0\python的目录下,执行命令python setup.py install; 6. 安装tensorflow:将安装包tensorflow-1.0.1-cp35-cp35m-win_amd64.whl复制到Anaconda3\Lib\site-packages\tensorflow文件中,然后通过cmd命令进入到Anaconda3\Lib\site-packages\tensorflow目录下,执行命令pip install tensorflow-1.0.1-cp35-cp35m-win_amd64.whl进行安装,待安装结束后,在Ipython命令行下输入import tensorflow as tf,若不报错则说明tensorflow安装成功。 7.下载keras源文件,并cd到下载的keras 文件夹的路径,执行命令:sudo python setup.py install。可能重复几次即可。 8.出现”sudo 不是内部命令”错误,可以将sudo文件粘贴在C:\Anaconda3下,并增至到环境变量中“;C:\Anaconda3” 9.sudo文件制作: 将下面的代码全部粘贴在新建文本文件中,并重命名文本文件为sudo.vbs (注意后缀改成了.vbs)。将sudo.vbs 所在路径添加到环境变量PATH 中 'ShellExecute 方法 '作用: 用于运行一个程序或脚本。 '语法 ' .ShellExecute "application", "parameters", "dir", "verb", window

Hadoop2.4、Hbase0.98、Hive集群安装配置手册

Hadoop、Zookeeper、Hbase、Hive 集群安装配置手册?

运行环境?
? 机器配置 虚机 CPU?E5504*2?(4 核心)、内存 4G、硬盘 25G ? 进程说明 QuorumPeerMain DFSZKFailoverController JournalNode ZooKeeper?ensemble?member Hadoop?HA 进程,维持 NameNode 高可用 Hadoop HA 进程,JournalNode 存储 EditLog, 每次写数据操作有大多数(>=N+1)返回成功时 即认为该次写成功,保证数据高可用 Hadoop?HDFS 进程,名字节点 HadoopHDFS 进程, serves?blocks Hadoop YARN 进程,负责 Container 状态的 维护,并向 RM 保持心跳。 Hadoop?YARN 进程,资源管理 Hadoop?MR1 进程, 管理哪些程序应该跑在哪 些机器上,需要管理所有 job 失败、重启等 操作。 Hadoop?MR1 进程,manages?the?local?Childs Hive 进程 HBase 主节点 HBase?RegionServer,?serves?regions 可以通过该服务查看已经运行完的 mapreduce 作业记录?
NameNode DataNode NodeManager ResourceManager JobTracker?
TaskTracker RunJar HMaster HRegionServer JobHistoryServer 主机/hostname 10.12.34.14/https://www.360docs.net/doc/7a3123484.html, 系统版 本 Centos 5.8?
应用 mysql mysqld?
服务进程?

关于Windows环境下protobuf初步学习指南

关于protobuf初步学习指南 撰写人:马宇昌 时间:2011-12-28 本文档设置了文档结构,如果不方便阅读,选择视图->文档结构图进行辅助阅读。 前言 关于protobuf资料与源码可在官方网站以及下面站点寻找 https://www.360docs.net/doc/7a3123484.html,/p/protobuf/ https://www.360docs.net/doc/7a3123484.html,/p/protobuf/downloads/list https://www.360docs.net/doc/7a3123484.html,/intl/zh-CN/apis/protocolbuffers/docs/overview.html 1.protobuf简介(引用网络上的内容,目的是对protobuf有简洁的了解) protobuf是google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传统的XML表示高效短小得多。虽然是二进制数据格式,但并没有因此变得复杂,开发人员通过按照一定的语法定义结构化的消息格式,然后送给命令行工具,工具将自动生成相关的类,可以支持java、c++、python等语言环境。通过将这些类包含在项目中,可以很轻松的调用相关方法来完成业务消息的序列化与反序列化工作。 protobuf在google中是一个比较核心的基础库,作为分布式运算涉及到大量的不同业务消息的传递,如何高效简洁的表示、操作这些业务消息在google这样的大规模应用中是至关重要的。而protobuf这样的库正好是在效率、数据大小、易用性之间取得了很好的平衡。 2.下载protobuf,我下载的是2.4.1版本 从https://www.360docs.net/doc/7a3123484.html,/p/protobuf/downloads/list网站下载需要的版本,目前最新的是2.4.1版本。下载protobuf-2.4.1.zip到H盘,解压后(最好选择右击压缩文件,解压到protobuf-2.4.1),找到vsprojects文件夹,阅读readme文件,里面介绍在windows下protobuf的使用方法。3.安装编译protobuf (1)打开libprotobuf工程 vsprojects文件夹中有很多项目工程,它们属于同一个解决方案。使用VS2008打开libprotobuf 工程,这里可能会遇到版本转换的问题,因为vsprojects中的protobuf是2005版本的。只要正常转换就可以了,不需要备份旧有的版本。转换后的protobuf解决方案如图1所示 图1 protobuf解决方案 (2)编译解决方案 右击解决方案protobuf->生成解决方案,或者选择生成->生成解决方案,或者分别编译各个

相关文档
最新文档