文档库 最新最全的文档下载
当前位置:文档库 › bdb使用心得及问题汇总

bdb使用心得及问题汇总

bdb使用心得及问题汇总
bdb使用心得及问题汇总

1.Bdb回调函数:

假如索引库的键值不是从pkey,pdata中拼接,则需要指明skey->flags = DB_DBT_APPMALLOC; 用户自己malloc一块地址拼接skey,防止bdb插入时候地址失效

2.索引库关联主库时候,单独查索引库1000/ms

按照索引查主库200/ms

3.使用共享内存:指明DB_SYSTEM_MEM标志(只生成__db001.db)

long shm_key = 38659;

ret = _env->set_shm_key(_env, shm_key);

4.int DB_ENV->remove(DB_ENV *dbenv, char *db_home, u_int32_t flags);

销毁当前不用的环境。所有与之相关的备份文件及环境区域被删除,而日志文件、数据库文件及环境路径仍然保留。若当前环境仍然在使用,需指定DB_ENV->FORCE标志,所有已经进入该环境区域的进程将照常运行,但新加入该环境的动作将失败。一般情况下,环境将随着数据库恢复的操作被清除,该函数并没有必要。但当打开该环境时启用了DB_SYSTEM_MEM,需要调用该函数释放掉被分配的共享内存段;另外,互斥结构被分配的系统资源也需要调用该函数来释放。在多线程操作中,只允许一个线程来进行该操作。

db_home用来指定被销毁环境的路径;若参数3为DB_USE_ENVIRON或DB_USE_ENVIRON_ROOT,说明环境路径使用了BDB File Naming来命名,参3为DB_FORCE的情况只在应用程序无法关闭或者出现死锁的时候出现。

DB_CURSOR: FLAG有参数DB_CURSOR_BULK?

5. 虽然Berkeley DB的B 树存取方法是一个相当传统的B+树实现,树节点之间的指针用

页面号而不是内存指针表示,因为函数也把磁盘页格式用作内存页格式。这种表示的优势在于页面可以不需要格式转换就能被从缓存刷出到磁盘,劣势在于遍历索引结构时需要(代价稍高的)重复的缓冲池查找而不是(代价稍低的)内存操作。

底层假设Berkeley DB索引的内存表示实际上是磁盘上持久数据的缓存,这还有其他的一些对性能的影响。例如,每当Berkeley DB访问一个缓存的页面时,首先要pin住内存中的页面。Pin操作防止任何其他的线程或进程将该页从内存池中换出。即便整个索引结构都可以在缓冲中放下,并且从不需要被刷新到磁盘,Berkeley DB仍然在每个操作时要获取和释放这些pin,因为Mpool底层的模型是一个缓存而不是一个持久存储。

6.BerkeleyDB的锁叫cds,需要在tie之前在env里设置init_cds,加锁函数为cds_lock,返回一个lock,解锁的时候对这个lock调用方法cds_unlock或者直接undef掉即可

7.B树的共享栓

所谓栓,是指一种资源,类似于mutex,是一种轻量级的锁。在4.7中,访问一个页的数据时,需要先锁住页(page),访问完后再释放锁。而在4.8 中,我们提出了的共享栓的概念,即当多个线程/进程并发访问同一个页的时候,尽量彼此使用共享的栓,从而避免等待。从我们的在Solaris 10上测试结果来看,如果线程数>= CPU数,4.7的性能下降较多;而使

用的共享栓的4.8,速度比同样情况下4.7的提升25%-16倍左右。当然,具体性能提升指标取决于应用场景和平台。

8.如果发现二级索引失效了,应该通过调用DB->remove()将其删除,同时,再调用一次DB->associate() 方法来生成新的索引;

Berkeley DB多线程支持

原先为了在多线程环境下使用bdb,还专门在调用其API前加线程锁。自己加锁除了多出工作量以外,还有一个麻烦:当一个DB的数据很大时,对它的加锁粒度就太大了,会拖慢性能。

后来才发现bdb自己是可以在多线程环境下使用的,只是在DB_ENV初始化时需要加标记:

DB_ENV *dbenv;

u_int32_t flags;

flags | = DB_THREAD;

dbenv->open(dbenv, “/home/data/”, flags, 0);

在这个DB_ENV下的操作就是线程安全的了,不过还有一点要注意,就是get数据时作为value的DBT需要加DB_DBT_THREAD标记:

DBT tKey,tValue;

tValue.flags = DB_DBT_MALLOC;

...

int ret=m_dbp->get(m_dbp,NULL,&tKey,&tValue,0);

...

free(tValue.data); //由于tValue.data指向的内存是bdb用malloc分配的,所以现在需要用户自己free

使用bdb自己的多线程支持比外部加锁方便、高效很多

1028742008001632

1005932011000075

Building multi-threaded applications

The Berkeley DB library is not itself multi-threaded. The library was deliberately architected to not use threads internally because of the portability problems that using threads within the library

would introduce.

Berkeley DB supports multi-threaded applications with the caveat that it loads and calls functions that are commonly available in C language environments. Other than this usage, Berkeley DB has no static data and maintains no local context between calls to Berkeley DB functions. Environment and database object handles returned from Berkeley DB library functions are free-threaded. No other object handles returned from the Berkeley DB library are free-threaded. The following rules should be observed when using threads to access the Berkeley DB library:

1The DB_THREAD flag must be specified to the DBENV->open and DB->open functions if the Berkeley DB handles returned by those interfaces will be used in the context of more than one thread. Setting the DB_THREAD flag inconsistently may result in database corruption.Threading is assumed in the Java API, so no special flags are required, and Berkeley DB functions will always behave as if the DB_THREAD flag was specified.Only a single thread may call the DBENV->close or DB->close functions for a returned environment or database handle.

No other Berkeley DB handles are free-threaded, for example, cursors and transactions may not span threads as their returned handles are not free-threaded.

2When using the non-cursor Berkeley DB calls to retrieve key/data items (e.g., DB->get), the memory referenced by the pointer stored into the Dbt is only valid until the next call to Berkeley DB using the DB handle returned by DB->open. This includes any use of the returned DB handle, including by another thread of control within the process.For this reason, if the DB_THREAD handle was specified to the DB->open function, either DB_DBT_MALLOC, DB_DBT_REALLOC or DB_DBT_USERMEM must be specified in the DBT when performing any non-cursor key or data retrieval.

3The DB_CURRENT, DB_NEXT and DB_PREV flags to the log_get function may not be used by a free-threaded handle. If such calls are necessary, a thread should explicitly create a unique environment handle by separately calling DBENV->open without specifying DB_THREAD.

4Each database operation (i.e., any call to a function underlying the handles returned by DB->open and DB->cursor) is normally performed on behalf of a unique locker. If, within a single thread of control, multiple calls on behalf of the same locker are desired, then transactions must be used. For example, consider the case where a cursor scan locates a record, and then based on that record, accesses some other item in the database. If these operations are done using the default lockers for the handle, they may conflict. If the application wishes to guarantee that the operations do not conflict, locks must be obtained on behalf of a transaction, instead of the default locker ID, and a transaction must be specified to subsequent DB->cursor and other Berkeley DB calls.

5Transactions may not span threads. Each transaction must begin and end in the same thread, and each transaction may only be used by a single thread.Cursors may not span transactions or threads. Each cursor must be allocated and de-allocated within the same transaction and within the same thread.

6User-level synchronization mutexes must have been implemented for the compiler/architecture combination. Attempting to specify the DB_THREAD flag will fail if fast mutexes are not available.If blocking mutexes are available, for example POSIX pthreads,

they will be used. Otherwise, the Berkeley DB library will make a system call to pause for some amount of time when it is necessary to wait on a lock. This may not be optimal, especially in a thread-only environment where it will be more efficient to explicitly yield the processor to another thread.It is possible to specify a yield function on an per-application basis.

See db_env_set_func_yield for more information.

It is possible to specify the number of attempts that will be made to acquire the mutex before waiting. Se db_env_set_tas_spins for more information.

Berkeley DB的使用

最近碰到一个项目需要多进程读写一份共享数据,并且共享数据的几个字段需要有倒排索引方便查询,想利用现有数据库快速建立一个原型,于是调研了一下流行的一些nosql数据库。发觉Berkeley DB虽然是一个既古老又流行的开源数据库,但是关于BDB使用的文章却很少,甚至公司DBA对BDB的特性都不太了解……于是花了好几天读了一遍BDB的references和c api,发觉BDB还是个相当复杂的系统。以下对一些常见问题做一个笔记:

数据存储

Berkeley DB的数据存储可以抽象为一张表,其中第一列是key,剩余的n-1列(fields)是value。BDB访问数据库的方式,或者套用MySQL数据库的说法是存储引擎,有四种:?Btree 数据保存在平衡树里,key和value都可以是任意类型,并且可以有duplicated keys

?Hash 数据保存在散列表里,key和value都可以是任意类型,并且可以有duplicated keys

?Queue 数据以固定长度的record保存在队列里,key是一个逻辑序号。这种访问方式可以快速在队列尾插入数据,然后从队列头读取数据。它的优点在于可以提供record 级别的锁机制,当需要并发访问队列的时候,可以提供很好性能。

?Recno 这种访问方式类似于Queue,但它可以提供变长的record。

BDB的数据容量是256TB,单个的key或value可以保存4GB数据。

BDB是为并发访问设计的,thread-safe,且良好的支持多进程访问。

少量或者中量数据都建议使用BTREE,尤其并发的场景下,BTREE支持lock coupling技术,可以提升并发性能。

BDB组成

Berkeley DB内含多个独立的子系统:

?Locking subsystem

?Logging subsystem

?Memory Pool subsystem

?Transaction subsystem

一般使用的时候,这些子系统都被整合在DB environment里,但它们也单独拿出来,配合BDB之外的数据结构使用。

所谓DB Environment就是一个目录,其中保存着Locking、Logging、Memory Pool等子系统的信息,不同的thread可以打开同一个目录读写DB environment,BDB通过这种方式实现多进程/线程共享数据库。

【注意】多进程共享一个环境时,必须要使用DB_SYSTEM_MEM,否则无法正常初始化环境。

关于DB environment的设置很多,一般没必要全部在代码里设置,也可以使用名为DB_CONFIG的配置文件来设置,该文件默认位于环境目录。

Concurrent Data Store (CDS)

CDS适用于多读单写的应用场景,当使用CDS的时候,仅需要DB_INIT_MPOOL | DB_INIT_CDB 这两个子系统,不应该启用任何其他子系统,比如DB_INIT_LOCK、DB_INIT_TXN、DB_RECOVER 等。

由于CDS并不启动lock子系统,所以使用CDS无需检查deadlock,但下面的几种情况会导致线程永远阻塞:

?混用DB handle和cursor(此时同一thread会有两个locker竞争)。

?当打开一个write cursor的时候,在同一个线程里有其他的cursor开启。

?不检查BDB的错误码(当一个cursor错误返回时,必须关闭这个cursor)。

其实CDS和DS的唯一区别就在于,当要写db的时候,应该使用DB_WRITECURSOR创建一个write cursor。当这样的write cursor 存在的时候,其他试图创建write cursor 的线程将被阻塞,直到该write cursor被关闭。当write cursor存在的时候,read cursor不会被阻塞;但是,所有实际的写操作,包括直接调用DB->put()或者DB->del()都将被阻塞,直到所有的read cursor关闭,才会真正的写入db。这就是multiple-reader/single-writer的具体工作机制。参考:Berkeley DB 产品对比

CDS中的注意事项

如果使用secondary database,意味着会在同一个cursor下操作两个db,此时如果用CDS,也许必须设置DB_CDB_ALLDB,但这会严重影响性能。

所谓DB_CDB_ALLDB 是一个非常粗粒度的锁,CDS的锁基于API-layer,默认per-database,但如果设置了DB_CDB_ALL,则是per-environment,这意味着:?整个DB environment下只能有一个write cursor。

?当写db的时候,整个DB environment下任何read cursor不可以打开。

读写CDS简单的做法是能用DB handle的地方直接使用DB handle,没有必要使用CURSOR handle,因为你用DB->put()或者DB->del()来修改数据库时,它内部也是调用了CURSOR handle。当然,如果你要使用CURSOR遍历数据库时,用于写的CURSOR必须设置DB_WRITECURSOR来创建:

DB->cursor(db, NULL, &dbc, DB_WRITECURSOR);

直接调用DB->put()或者DB->del(),或者先使用DB_WRITECURSOR创建CURSOR handle,最终都进入__db_cursor()函数,设置db_lockmode_t mode = DB_LOCK_IWRITE,然后用该mode加锁。但需要注意的是,不能在同一thread下混用DB和CURSOR handle,因为每个CURSOR会分配一个LOCKER,而DB handle也会分配一个LOCKER,两者可能导致self-deadlock。

如果在read lock或者write lock过程中,程序崩溃,这可能导致lock遗留在env中无法释放

(可以用db_stat -CA观察到),这种情况下该environment已经损坏,只能删除该environment (删除掉__db.001之类的文件即可),重新创建。

Transactional Data Store (TDS)

TDS是使用BDB的终极方式,它适用于多读多写,并且支持Recoveriablity等任何你能想到的常见数据库特性,或者不如说,只有当你确定需要这些特性的时候,你才应该使用BDB;如果你仅仅想要一个单纯的KV系统,那也许BDB并不适合你。

一般来说,创建TDS Environment的flag如下:

DB_CREATE | DB_INIT_MPOOL | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_TXN

TDS的任何DB相关的操作都必须是事务性的,包括打开db时,都需要先创建txn:

DB_TXN* txn;

int ret = env->txn_begin(env, NULL, &txn, 0);

ret = db->open(db, txn, "test.db", NULL, DB_BTREE, DB_CREATE, 0);

// 如果使用secondary database, 则associate()调用也需要包含在txn里

ret = db->get(db, txn, &key, &val, 0);

ret = db->put(db, txn, &key, &val, 0);

if(ret) txn->abort(txn);

else txn->commit(txn, 0);

如果仅仅有读操作,其实可以无需调用commit,直接abort即可。

如果使用DB_AUTO_COMMIT打开db,则关于db handle的操作,不需要额外指定txn参数,此时使用了BDB的autocommit特性。

Write Ahead Logging

WAL是很多事务性数据库使用的技术,即在数据实际写入到数据库文件之前,先记录log,一旦log被写入到log文件,即认为该事务完成(并不会等待数据实际写入到数据库文件)。这是因为log的写入始终是顺序写到文件末尾的,这比实际数据写入数据库文件(随机写入文件)要快2个数量级。

清理无用log的办法:

?使用命令db_archive -d

?调用ENV->set_flags 设置DB_LOG_AUTOREMOVE

Deadlock

使用TDS时,死锁原则上无法避免:

?两个进程互相等待一块被对方锁住的资源则会发生死锁

?甚至单一进程内试图获取一个已经被不同locker获取过的lock,也会发生死锁

采用BTREE/HASH访问方式下,并发操作时,无法避免死锁,因为page splits随时可能发生,见图:

死锁检测(原理是遍历wait-for图,发现环;如果有环出现,则打破它):

?同步检测DB_ENV->set_lk_detect(),在每个阻塞的锁上检测,好处是立即发现,坏处是cpu占用略高(insignificant)

?异步检测DN_ENV->lock_detect()或者db_deadlock,需要额外发起一个进程或线程,坏处是只有当运行该命令时才能检测,好处是cpu占用低

一般解决死锁的办法:同步检测+异步检测+设置锁超时

当environment没有被损坏时,可以使用db_stat -Cl 查看死锁情况。

Degree 2 isolation

degree 2 isolation保证事务读到已经COMMIT的数据,但是在该读事务结束之前,其他事务可以修改该记录。degree 2 isolation适用于长时间的读取事务,比如遍历数据库等。

使用办法:使用DB_TXN->txn_begin(), DB->get(), DBC->get()等函数时,设置参数DB_READ_COMMITTED。

区别于degree 3 isolation,后者保证在一个读事务内,无论读取多少遍,都可以读到同样的记录。但这会拒绝该记录的任何写事务。所谓degree 1 isolation则更进一步,可以读取未COMMIT的数据,建议谨慎使用,容易导致数据不一致。

性能调优和参数设置

lock table size

lock table的大小依赖于以下三个参数:

?lock最大数量:ENV->set_lk_max_locks()同时可以请求的锁的最大值,比如同时2进程并发,要锁11个对象,则需要2x11个锁。

?locker最大数量:ENV->set_lk_max_lockers()同时发起锁请求的最大值,比如同时2进程并发,则最多2个locker。

?lock object最大数量:ENV->set_lk_max_objects()同时需要锁住的object的最大值,比如同时2进程并发,如果5层BTREE,则需要锁住2x5=10个对象,此外再加上单独的DB handle。

实际上面的计算得到的最大值还要double,因为如果开启deadlock检测,对每个locker来说BDB会新增一个dd locker,用于检测死锁。

timeout

可以分别设置锁和事务的超时:

?ENV->set_timeout()设置锁和事务的默认超时

?DB_TXN->set_timeout()单独设置事务的超时

cachesize

使用db_stat查看cache命中情况:

$ db_stat -h var -m

125MB 8KB Total cache size

1410M Requested pages found in the cache (99%)

14 Requested pages not found in the cache

建议根据程序设置合理的cachesize,尽量保证所有数据都可以被cache命中。

你是否需要BDB

可以看出BDB比一般的KV数据库还是要复杂很多的,如果你需要如下的一些特性,也许你可以考虑BDB:

?期望对value部分也建立索引,比如需要secondary indices,多表之间join

?多个进程并发读写数据库(但需要注意的是,在高并发情况下,比如8进程每秒1000读请求几条写请求,你在解决死锁问题上花费的时间也许会让你痛不欲生)

?事务性、HA

如果你只需要一个简单有效的KV系统,leveldb也许是一个更好的选择,接口也更modern 清晰简洁。

如果你只是单thread,那么BDB、sqlite等等,随便用什么都可以。

性能测试,在如下的配置上:

Linux – SuSE Linux 9.1 running on an AMD Athlon 64 processor 3200+ at 1GHz system with 1GB of RAM。

每秒钟,单条记录读操作1,002,200次。单条记录写操作766,034次。用bulk APIs能进行读操作13,501,800次。当然这些都是发生在内存中的操作,因为bdb使用了cache。性能测试具体数据可以参考官方网站的Performance Metrics & Benchmarks: Berkeley DB。

If the error:

"unable to allocate memory for mutex; resize mutex region"

is raised use db_stat -x/db_stat -e output to view the statistics for the mutex region.

学习笔记:

一、通用配置

1. 选择合适的access method(BTree、Hash、Queue or RecNo)

2. (DB->set_pagesize)选择合适的pagesize,处于性能考虑,最好和os的block size匹配,除非每个key/value的数据很大,如果pagesize过小,会导致overflow page的问。

3. DB->set_cachesize

4. DB->set_lorder设置字节序。

5. DB->set_flag(DB_DUP)设置BTree的存储是否支持duplicate keys,缺省情况不支持重复键。DB->get()只是返回重复键中的第一个键值对,重复键数据的获取只能通过DBC-> get(),重复键的插入缺省行为是append方式,如果打算自定义需要通过DBC->put(),同时制定DB_AFTER, DB_BEFORE, DB_KEYFIRST or DB_KEYLAST.

6. DB->set_flag(DB_DUPSORT)设置data为自动排序模式,这将极大的提高searching和join 的效率。DB->set_dup_compare可以设置data的自定义排序方法。如果该表示已经设置,BDB

则不允许生成duplicate data,即key/value都是相同的。

二、BTree配置

1. DB->set_bt_compare, 用户可以自定义key的比较函数

1int compare_int(DB* dbp, const DBT *a, const DBT *b) {

2int ai, bi;

3 memcpy(&ai,a->data,sizeof(int));

4 memcpy(&bi,b->data,sizeof(int));

5return ai - bi;

6 }

7

8//比较前5个字符的比较函数

9int compare_dbt(DB* dbp,const DBT *a, const DBT *b) {

10int len;

11 u_char *p1, *p2;

12for (p1 = a->data, p2 = b->data, len = 5; len--; ++p1,++p2) {

13if (*p1 != *p2)

14return (long)*p1 - (long)*p2;

15 }

16return0;

17 }

2. DB->set_bt_prefix,用于前缀比较,其比较规则应和完全比较的规则一致,应用该方法主要便于BDB中的page每次只是存储能够区分任何两个键的差别,从而使每页可以存储更多的数据,提高查询的效率,该函数返回任意两个键比较之后的最小可识别的字符数量,如果两个keys在比较时,比较长度直到长度较小的结尾时仍然相等,则返回较小key的长度加一。

1 u_int32_t compare_prefix(DB* dbp, const DBT *a, const DBT *b) {

2 size_t cnt, len;

3 u_int8_t *p1,*p2;

4 cnt = 1;

5 len = a->size > b->size ? b->size : a->size;

6for (p1 = a->data, p2 = b->data; len--; ++p1,++p2,++cnt) {

7if (*p1 != *p2)

8return cnt;

9 }

10

11if (a->size < b->size)

12return a->size + 1;

13if (b->size < a->size)

14return b->size + 1;

15return b->size;

16 }

3. DB->set_bt_minkey, 用于设置DB中每个page上可容纳的key/value的最小数量,参考如下公式:

maximum_size = page_size / (minimum_keys * 2)

之所以minimum_key乘以2,是因为key和value在page中需要占用两个slot,此例中,如果page_size = 8k, minimum_keys = 2,那么任何key或value超过2k的项都将存入overflow page。

4. DB->set_bt_compress(dbp,NULL,NULL), 后面两个NULL参数表示使用BDB自带的缺省压缩和解压缩算法,该函数需要在DB被打开之前调用。

三、Hash配置

1. DB->set_h_ffactor() 设置填充因子,用于确定每个hash bucket中可能容纳key/value的一个近似值,以决定hash table应该在什么时候增长或缩短。请参照以下设置方式

(pagesize - 32) / (average_key_size + average_data_size + 8)

2. DB->set_h_hash(), 设置自定义的hash方法。

3. DB->set_h_nelem(), 用于设定hash table中可能容纳的element数量,如果设置的比较接近真实情况,将更好的避免由于hash bucket动态增长而带来的性能损失,设置该值时也需要考虑设置fill factor。

四、Recno和Queue配置

1. DB->set_re_len(),用于设置fixed-length记录的长度。短于该长度的数据,将用DB->set_re_pad中设置的字符进行尾部填充,长于该值的data,将会导致一个错误发生。

五、DB Partitioning

1. 只用BTree和Hash两种方式可以支持partitioning。

2. DB->set_partition(),DB->set_partition_dirs(), 这两个函数用于对DB进行partition,他们必须在数据库第一次被open之前调用,一旦partition成功之后,其partition的scheme将不能再改变。其中后面的函数主要用于指定partition文件所在的home directory。分区策略是,可以给partition指定其所包含的key的值,也可以通过回调函数的方式,通过回调函数的返回值来确定该键应该存放的partition。

a--f to go on partition 0

g--p to go on partition 1

q--z to go on partition 2

如果打算使用数组的方式进行partition,set_partition中回调函数参数为NULL。

1void partition_exampe_with_array() {

2 DBT partKey[2];

3int ret;

4

5 memset(partKeys,0,sizeof(DBT) * 2);

6 partKeys[0].data = "g";

7 partKeys[0].size = sizeof("g") - 1;

8 partKeys[1].data = "q";

9 partKeys[1].size = sizeof("q") - 1;

10

11 dbp->set_partition(dbp,3,partKeys,NULL);

12 }

如果打算使用回调的方式进行partition,set_partition中分区提示数组参数为NULL。

1void partition_example_with_callback() {

2 dbp->set_partition(dbp,3,NULL,db_partition_fn);

3 }

4

5//参数key实际存放的partition No = ret % number_of_partitions

6u_int32_t db_partition_fn(DB* db,DBT* key) {

7char* key_data;

8 u_int32_t ret;

9

10 key_data = (char*)key->data;

11//根据key_data的值进行自定义运算,从而判定该key应该存放的partition。

12ret = 0;

13return ret;

14 }

3. DB->set_partition_dirs(),该函数必须在数据库创建和打开之前设定,一旦成功设定并打开DB,该值将不可变。推荐设置和partition相同数量的dirs。dir可以通过绝对和相对路径支出,可以位于不同的磁盘。如果DB的打开是基于Environment的,在设置之前,需要保证所设定目录已经存在于DB_ENV->add_data_dir()的列表中。

六、Secondary Indexes

1. 可以通过给key/value中value的部分信息建立索引,作为secondary db,其key为期望的索引数据,value为primary db的key。

1struct student_record {

2char student_id[4];

3char last_name[15];

4char first_name[15];

5 };

6

7void example_of_secondary() {

8 DB *dbp, *sdbp;

9int ret;

10

11//open/create primary

12if ((ret = db_create(&dbp,dbenv,0))

13 handle_error(ret);

14if ((ret = dbp->dbp,NULL,"student.db",NULL,DB_BTREE,DB_CREATE,0600)) != 0)

15 handle_error(ret);

16

17//open/create secondary

18if ((ret = db_create(&sdbp,dbenv,0)) != 0)

19 handle_error(ret);

20if ((ret = sdbp->set_flags(sdbp,DB_DUP|DB_DUPSORT)) != 0)

21 handle_error(ret);

22if ((ret = sdbp->open(sdbp,NULL,"lastname.db",NULL,DB_BTREE,DB_CREATE,0600)) != 0) 23 handle_error(ret);

24//如果基于已有数据recreate secondary index,需要在associate方法中传入DB_CREATE 标志。

25if ((ret = dbp->associate(dbp,NULL,sdbp,getname,0)) != 0)

26 handle_error(ret);

27 }

28

29int getname(DB* secondary,const DBT* pkey, const DBT* pdata,DBT* skey) {

30/*如果在构造skey的数据时,需要自定义组合某些数据信息,此时需要用户函数自行分配内存并copy数据到该缓冲,同时也需要给skey的flag设置DB_DBT_APPMALLOC*/

31 memset(skey,0,sizeof(DBT));

32 skey->data = ((struct student_record*)pdata->data)->last_name);

33 skey->size = sizeof(((struct student_record*)pdata->data)->last_name);

34return0;

35 }

2. 如果删除primary中的数据,相关的secondary数据也会自动删除,反之亦然。通过DB->pget和DBC->pget()可以通过secondary的查询获取primary中key和value。但是不能直接在secondary DB中直接插入数据。

七、DB Cursor

1. DB_CONSUME标志:Read-and-Delete, 这个标志只能用于Queue类型的DB,头部记录将被返回并删除。

2. DB->join: 相等性连接。请参照以下示例:

1//DB_Personnel { key = SSN data = record contain name, address, phone number,job titile }

2//DB_Lastname { key = lastname data = SSN }

3//DB_jobs { key = job title data = SSN }

4

5void example() {

6 DBC *name_curs,*job_curs,*join_curs;

7 DBC *carray[3];

8 DBT key,data;

9int ret, tret;

10

11 name_curs = NULL;

12 job_curs = NULL;

13 memset(&key,0,sizeof(key));

14 memset(&data,0,sizeof(data));

15

16if ((ret = name_db->cursor(name_db,txn,&name_curs,0)) != 0)

17goto err;

18

19 key.data = "smith";

20 key.size = sizeof("simth");

21if ((ret = name_curs->get(name_curs,&key,&data,DB_SET)) != 0)

22goto err;

23

24if ((ret = job_db->cursor(job_db,txn,&job_curs,0)) != 0)

25goto err;

26

27 key.data = "manager";

28 key.size = sizeof("manager");

29if ((ret = job_curs->get(job_curs,&key,&data,DB_SET)) != 0)

30goto err;

31

32 carray[0] = name_curs;

33 carray[1] = job_curs;

34 carray[2] = NULL;

35

36if ((ret = pers_db->join(pers_db,carray,&join_curs,0)) != 0)

37goto err;

38

39while ((ret = join_curs->get(join_curs,&key,&data,0)) == 0) {

40//TODO Process record returned in key/data

41 }

42

43if (ret == DB_NOTFOUND)

44return = 0;

45

46 err:

47if (join_curs != NULL && (tret = join_curs->close(join_curs) != 0 && ret == 0)

48 ret = tret;

49if (name_curs != NULL && (tret = name_curs->close(name_curs) != 0 && ret == 0)

50 ret = tret;

51if (job_curs != NULL && (tret = job_curs->close(job_curs)) != && ret == 0)

52 ret = tret;

53return ret;

54 }

八、Bulk获取和更新

1. DB_MULTIPLE和DB_MULTIPLE_KEY分别对应于获取所有指定key的duplicate data和多个keys/values

DB_MULTIPLE_INIT用于最初的初始化调用。

DB_MULTIPLE_NEXT: 该宏总是和DB_MULTIPLE标志绑定使用。

DB_MULTIPLE_KEY_NEXT: 该宏总是和DB_MULTIPLE_KEY标志绑定使用,同时要求底层db的类型为BTree or Hash。

DB_MULTIPLE_RECNO_NEXT: 该宏总是和DB_MULTIPLE_KEY标志绑定使用,同时要求底层db的类型为Queue or Recno。

在调用DB->get() or DBC->get()的时候,将DBT data参数data字段指向buffer,ulen表示buffer的长度,flags字段需要设置为DB_DBT_USERMEM

1#define BUFFER_LENGTH (5*1024*1024)

2int rec_display(DB *dbp) {

3 DBC *dbcp;

4 DBT key,data;

5 size_t retklen,retdlen;

6char *retkey,*retdata;

7int ret,t_ret;

8void *p;

9

10 memset(&key,0,sizeof(key));

11 memset(&data,0,sizeof(data));

12

13if ((data.data = malloc(BUFFER_LENGTH)) == NULL)

14return errno;

15 data.ulen = BUFFER_LENGTH;

16 data.flags = DB_DBT_USERMEM;

17

18if ((ret = dbp->cursor(dbp,NULL,&dbcp,0)) != 0) {

19 dbp->err(dbp,ret,"DB->cursor");

20 free(data.data);

21return ret;

22 }

23

24for (;;) {

25if ((ret = dbcp->get(dbcp,&key,&data,DB_MULTIPLE_KEY | DB_NEXT)) != 0) { 26if (ret != DB_NOTFOUND)

27 dbp->err(dbp,ret,"DBcursor->get");

28break;

29 }

30

31for (DB_MULTIPLE_INIT(p,&data);;) {

32 DB_MULTIPLE_KEY_NEXT(p,&data,retkey,retklen,retdata,retdlen);

33if (p == NULL)

34break;

35 printf("Key: %.*s, Data: %.*s\n",(int)retklen,retkey,retdlen,retdata);

36 }

37

38if ((t_ret = dbcp->close(dbcp)) != 0) {

39 dbp->err(dbp,ret,"DBcursor->close");

40if (ret == 0)

41 ret = t_ret;

42 }

43

44 free(data.data);

45return ret;

46 }

47 }

九、部分记录读取和存储

1. 在进行数据操作的时候需要为DB->put() or DB->get()的DBT data参数的flags字段设定DB_DBT_PARTIAL标志。同时还要指定doff(偏移量)和dlen(长度)。如"ABCDEFGHIJ",如果doff=3 and dlen=4,其所操作的字符串为"DEFG"。在进行数据部分替换的时候,DB->put()将使用data的data字段和size字段表示的数据替换其doff字段和dlen字段所包含的数据,如果size大于ulen,该key的data item将增大,否则data item将缩小。

2. 在使用DB->get() or DBC->get()获取数据的时候,其返回的data.data指针指向实际包含的数据,由于该指针所指向的地址在缺省情况下是有BDB内部自行分配的,因此当有任何对BDB的handle操作时,该地址将变为无效,这其中包括多线程中的争用。如果打算避免此类问题的发生,需要自行分配内存空间,同时将DBT data的flags标志设定DB_DBT_USERMEM即可。

十、错误支持

1. DB->db_strerror(error_ret): 其功能和用法类似于Ansi C中的strerror,只是该函数不仅能够处理system errors,也能够处理BDB特定的errno。

2. DB->db_setpfx(), 为后面调用DB->db_err()和DB->db_errx()函数输出错误信息时,提供一致性的前缀。

3. DB->db_err(), 其用法类似printf,只是还会为第二个参数中给出的错误返回值打印出其错误消息。

4. DB->db_errx(), 其用法类似printf,但是比db_err()更简单。

1#define DATABASE "access.db"

2void errorExampe() {

3int ret;

4(void)dbp->set_errpfx(dbp, program_name);

5

6if ((ret = dbp->open(dbp,NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {

7dbp->err(dbp, ret, "%s", DATABASE);

8dbp->errx(dbp, "contact your system administrator: session ID was %d", session_id);

9return1;

10}

11}

输出结果:

my_app: access.db: Permission denied.

my_app: contact your system administrator: session ID was 14

十一、Little Endian对Key排序的影响

假设用户存放254到257这4个数字以Little Endian的方式put到DB中,其内存布局为:254 fe 0 0 0

255 ff 0 0 0

256 0 1 0 0

257 1 1 0 0

如果将他们视为缺省的lexicographical排序方式,其排序结果如下:

256 0 1 0 0

257 1 1 0 0

254 fe 0 0 0

255 ff 0 0 0

如果在Big Endian的体系结构中,他们的内存布局为:

254 0 0 0 fe

255 0 0 0 ff

256 0 0 1 0

257 0 0 1 1

结论:推荐使用Big Endian的方式存储整型数据,以便使Tree更加紧凑。

对于数据库文件本身,其byte order是相对独立的,因为在多个拥有不同byte order的machine中copy这些数据文件是没有问题,字节序的处理细节均需交给程序本身来完成。log 文件的字节序是有依赖的,因为只能在拥有相同byte order的主机之间进行copy。

十二、Env相关的设置

1. 环境的目录信息设置。

dbenv->set_lg_dir(dbenv,"logdir");

dbenv->set_data_dir(dbenv,"datadir");

dbenv->set_tmp_dir(dbenv,"temp");

dbenv->open(dbenv,"/a/database",flags,mode);

以上代码将日志文件存放于/a/database/logdir,数据文件存放于/a/database/datadir, 临时文件存放于/a/database/temp.

十三、事物

1. DB_TXN_WRITE_NOSYNC and DB_TXN_NOSYNC标志,将会让事物的commit操作避免了同步的disk IO,从而极大的提高了事物的性能,也同时降低了死锁的风险。

2. 当有多个简单的事物操作同时发生时,如DB->put(),是不会有死锁产生的,因为他们同一时间只是持有一把锁,复杂的事物由于会在很长的时间内同时持有多把锁,因此,如果同时存在多个复杂的事物将会极大的提高死锁的几率。如果出现该类情况,可以考虑将复杂的事物划分为多个子嵌套事物,以便缓解死锁带来的问题。

3. 数据隔离性:下面的事例用于表示多个线程同时从DB中读取同一条记录,并且将其data 加一后回写。如果此时没有事物的隔离性保护,由于是并发的在同一条记录进行操作,因而

可能会产生race condition,最终会导致错误的结果。

1int add_color(DB_ENV* dbenv,DB* dbp,char* color, int increment) {

2DBT key, data;

3DB_TXN* tid;

4int fail,original,ret,t_ret;

5char buf64;

6

7memset(&key,0,sizeof(key));

8key.data = color

9key.size = strlen(color);

10memset(&data,0,sizeof(data));

11//设置该标志用于提示BDB负责分配内存(based on malloc function),由caller决定何时通过free释放该内存,

12//对于多线程同时操作的情况,应该使用该方式,从而避免在BDB的内部多个线程共享同一地址空间。该标志还可以带来

13//一定的效率提升,由于只是进行了一次内存分配,caller即可以自由的使用,并根据自己的情况决定何时释放,相比于

14//传统的local memory方式,数据持有者将节省了一次内存copy的工作。

15data.flags = DB_DBT_MALLOC;

16

17for (fail = 0;;) {

18if ((ret = dbenv->txn_begin(dbenv,NULL,&tid,0)) != 0) {

19dbenv->err(dbenv,ret,"DB_ENV->txn_begin");

20exit(1);

21}

22

23//DB_RMW标志表示在读取数据的时候即直接获取写锁,因为该代码逻辑是获取指定key 的数据,加一后回写,

24//因而最终还是有写操作放生在同一记录上,使用该标志可以降低从读锁到写锁升级过程中而带来的死锁可能。

25switch (ret = dbp->get(dbp,tid,&key,&data,DB_RMW)) {

26case0:

27original = atoi(data.data);

28break;

29case DB_LOCK_DEADLOCK:

30default:

31if ((t_ret = tid->abort(tid)) != 0) {

32dbenv->err(dbenv,t_ret,"DB_TXN->abort");

33exit(1);

34}

35if (fail++ == MAXIMUM_RETRY)

36return ret;

37continue;

38case DB_NOTFOUND:

39original = 0;

40break;

41}

42if (data.data != NULL)

43free(data.data);

44

45snprintf(buf,sizeof(buf),"%d",original + increment);

46data.data = buf;

47data.size = strlen(buf) + 1;

48

49switch (ret = dbp->put(dbp,tid,&key,&data,0)) {

50case0:

51if ((ret = tid->commit(tid,0)) != 0) {

52dbenv->err(dbenv,t_ret,"DB_TXN->commit");

53exit(1);

54}

55return0;

56case DB_LOCK_DEADLOCK:

57default:

58if ((t_ret = tid->abort(tid)) != 0) {

59dbenv->err(dbenv,t_ret,"DB_TXN->abort");

60exit(1);

61}

62if (fail++ == MAXIMUM_RETRY)

63return ret;

64break;

65}

66}

67}

4. 死锁检测通过两种方式进行设置,其一是在dbenv初始化的时候调用该函数dbenv->set_lk_detect(dbenv, DB_LOCK_DEFAULT),也可以通过一个独立的线程定时的执行dbenv->lock_detect()方法,前者将会使每次出现conflict的时候都会执行死锁检测,因此会影响并发的性能,后者是在一个单独的线程中定时的完成,所以效率更好。

5. checkpoint,定时的执行dbenv->txn_checkpoint()函数,可以将日志文件中最近更新的数据(上一次执行该函数之后)直接flush到database文件中去。执行checkpoint操作的频率越高,DB_RECOVERY的操作完成的越快。

6. 数据备份,主要分为标准备份和热备份两种。

标准备份的步骤:

1) 提交或者放弃所有当前的事物;

2) 停止所有写操作,读操作可以进行,知道备份完毕;

3) 在该DBENV上强制执行一个checkponit操作

4) 运行db_archive工具加-s选项,列出所有当前可用的数据库文件,copy他们到备份介质,推荐将database files放到单独的目录,这样可以直接copy该子目录。

5) 运行db_archive工具加-l选项,列出所有当前可用的日志文件,copy最后一个日志文件到备份介质。

热备份的步骤:

1) 在环境中设置DB_HOTBACKUP_IN_PROGRESS标志,其将影响DB_TXN_BULK的行为,致使Bulk操作可以产生日志数据。

2) 完成标准备份中的第四步骤,确保你使用的copy工具,可以对database page进行原子性copy。

3) 归档所有的日志文件,将其copy到备份介质,鉴于此,推荐将日志文件存放到环境主目录下的一个单独子目录。注意,一定要保证copy的顺序是先copy数据文件,再copy日志文件,特别是当数据文件和日志文件存放于同一目录下时。

4) 恢复DB_HOTBACKUP_IN_PROGRESS.

5) 为了缩短日志的copy时间,可以在hotbackup之前,通过db_archive工具识别出不在使用的日志文件,将其移出当前的目录。

7. 日志移除

1) db_archive -d 将移除所有不在使用的日志文件。

2) 调用DB_ENV->log_archive()函数,同时将flags参数设置为DB_ARCH_REMOVE,其效果同1)。

3) 调用DB_ENV->log_set_config()函数,同时将flags参数设置为DB_LOG_AUTO_REMOVE,这样BDB将自动移除所有不在使用中的日志文件,应用程序同样也没有机会copy这些日志文件到备份介质。

十四、Replication

1. 所有被复制的数据库文件必须位于DB_ENV的主目录下面,或者是位于DB_ENV->set_data_dir()中指定的目录中,不能位于其子目录内。

2. 环境初始化必须包含DB_INIT_REP和DB_THREAD两个标志。

3. 该结构的DB_ENV必须是支持事务的。

4. 调用DB_ENV->repmgr_set_local_site()、DB_ENV->repmgr_set_ack_policy()和DB_ENV->repmgr_add_remote_site(), 以便初始化复制的通讯层,最后调用DB_ENV->repmgr_start()方法启动复制管理器。

5. 其他和Replicatio Manager方式相关的函数:

1) DB_ENV->rep_set_nsites() 设置Replication Group中BDB的数量,以便用于master失败后的election。

2) DB_ENV->rep_set_priotiry() 设置优先级,该值越高,在竞选master的过程中,成为master 的可能性越高。

3) DB_ENV->rep_set_timeout() 设置master和slaves之间的heartbeat超时,如果指定时间内没有收到master的HeartBeat,election将被启动。

III. 配置Btree

以下配置Btree的方法都应在打开Btree前完成。

文献管理软件使用心得

1.科研工作者的三大能力: 获取信息的能力——文献搜索引擎的使用 管理信息的能力——文献管理软件的使用 分析信息的能力——文献分析软件的使用 2.endnote在文献管理软件中的地位: endnote由Thomson Reuters公司开发,配合其搜索引擎SCI和编辑软件word,收到广泛好评 endnote在目前文献信息管理领域的占有率约为50%,使用最为广泛 NoteExpress适合中文文献信息管理 3.endnote的主要功能: 进行数据库检索 文献信息集中管理 进行一定的统计分析 做笔记和管理 调整参考文献的插入格式,省去手动编排参考文献格式的麻烦 应用杂志的论文模板快捷写作 4.endnote软件使用前的一些基本概念: 文献信息:endnote的管理对象,注意并非文献全文本身 Database:网上存放文献以及信息的数据库 Library:本地(endnote)管理文献信息的数据库,一般是一篇论文对应一个Library Filter:database中存放的文献信息的数据格式到endnote使用的文献信息格式之间的转换器 reference type:参考文献格式,杂志论文、书、会议论文、专利等 style:不同杂志的word写作模板,既指正文模板又指参考文献引用模板 5.endnote的文件类型: .enl+.data=.enlx (library压缩文件) .enlx解压以后会在相同路径下产生对应.enl和.data文件夹 endf是Filter文件 不同的文献信息导入格式也不同 6.endnote library里文献信息的导入方法: 首先必须先建立library,然后导入该library的文献信息 (1)手动添加(new reference):该方法法应对大量的文献工作 注意:人名和关键词一行一个,否则无法区分 (2)用endnote连接到网络数据库database,然后检索与下载

参考文献管理软件_EndNote简介_一_

?医学论文撰写讲座?参考文献管理软件———EndNote简介(一) 任爱国 通常,在用Micro soft Word撰写论文的过程中,如果要插入参考文献,需要依次输入参考文献的编号,再做成上角标格式,如“[1]、[225]、[1,5,628]”;在文末则要逐条键入与文内引用相对应的文献编号和参考文献信息。如欲增加或删除参考文献、变更参考文献的顺序,或者改变参考文献的格式,必须重新手工操作一遍,效率十分低下,而且极易出错。如文末文献的编号与文内引用编号不一致、引用同一篇文献时出现多个编号、英文拼写错误、文献格式不正确等。事实上,这些正是论文稿件中最常见的错误。撰写综述或学位论文时,参考文献的数量大多在数十篇,甚至百篇以上。参考文献的编辑尤其烦杂,而且更容易出现错误,影响人们对论文的评价。使用Word的尾注功能,也可部分实现对参考文献的自动管理。但与专门的参考文献管理软件相比,仍然不够便捷。参考文献管理软件可以非常方便地查找到需要的文献、插入Word文本内、自动生成杂志需要的格式,并且可以轻松完成参考文献的修改和参考文献格式的变更。不但效率高,而且可将参考文献中的错误减少至最低。 文献管理软件有多种,国外的如EndNote、Reference Manager、Procite、Biblioscape等;国内的如医学文献王、Note Express等。Procite和Reference Manager不支持中文,Biblioscape易用性不是很好。以下介绍EndNote的使用方法。 一、EndNote概述 EndNote由Thomson Corporation下属的Thomson ResearchSoft(http://www1endnote1 com)开发,目前最新版本为X(1010)。Endnote 的主要功能包括: 11建立本地文献数据库:通过将CD2ROM文摘数据库或网络文摘数据库检索结果保存后导入、 作者单位:100083 北京,北京大学生育健康研究所健康促进研究部 网络文摘数据库检索后直接输出、远程联机检索、手工输入等方法,建立本地专题文献数据库,便于浏览、检索和标记(读书笔记)。 21自动生成参考文献清单:通过与Word的无缝衔接,在用Word撰写论文时,在文内插入需要的参考文献,在文末自动生成符合杂志要求的参考文献清单,并可轻松实现对参考文献的修改,如增加、删除、变更顺序等。 31管理参考文献全文、图片、表格:将EndNote数据库内的文献信息与本地的文献全文、图、表,或网上的pdf全文建立链接,便于阅读和管理。 二、EndNote的安装 EndNote的安装与一般软件的安装过程类似。安装完成后,在桌面增加EndNote图标,并在Windows内增加“EndNote”程序组,内含“EndNote Help,EndNote Manual,EndNote Program和Update EndNote”四个图标。点击“EndNote Program”即可启动EndNote。 EndNote除了独立运行之外,还作为Word的一个插件,与Word协同工作。安装成功以后,系统自动在Word中建立一个EndNote X工具栏。通过点击工具栏上的按钮,可以实现两者的协同工作和互相切换。 三、EndNote的工作原理 EndNote需要首先建立一个本地数据库,以1enl为扩展名。数据即参考文献。可以通过以下任何一种或多种途径得到: 从文摘数据库(如M EDL IN E、CBMdisc、CN KI等)检索、存盘,然后通过过滤器(Filter)导入。 从网络文摘数据库(如EMBASE、Ovid等)检索后直接输出(Export)。 从全文网站下载(Download)。 远程联机检索。 手工输入。 ? 6 2 1 ?

心得体会:统编教材初体验

心得体会:统编教材初体验 学期伊始,伴随着一年级学生天真烂漫的笑容,统编语文教材也如期而至。我在实施统编语文教材的过程中,发现了其中的几个特点。 学生天性的科学发掘。翻阅统编语文教材一年级上册的课文目录,发现课文的内容发生了很大变化。起步阶段的统编语文教材,尊重学生的年龄特点和身心发展规律,保护学生天性。学生对语言学习有着天然的热爱,对周围世界充满了好奇,听故事、讲故事、看图说话等学前阶段的重要语言活动形式,在一年级得以延续,借助学生的口语优势实现向书面语言的过渡。统编语文教材保护了学生探索世界的兴趣和好奇心,采用游戏、活动等形式引导学生学习新知,让学生在喜闻乐见的游戏活动中学习,实现幼小衔接,平稳过渡。 自主学习兴趣的内部激发。统编语文教材设置了不同栏目,引导学生发现语言学习的规律,鼓励学生进行探究学习,尽可能多地为学生提供展示交流的机会。教师通过丰富多彩的互动活动设计,引导学生改变被动接受知识的学习方式,在主动探究过程中感受语文学习的乐趣,不断激发学习动力。

比如识字教学,统编语文教材一年级识字量减少了,也适当降低了识字教学的难度。上册只要求识字300个,写字量100个。除了在阅读中识字、在识字中阅读的教学策略外,我们支持并倡导有能力的学生在生活中自主识字。写字在低年级教学中也是第一学段的重点,是贯穿整个义务教育阶段的重要内容。教师要加强对学生写字的指导和练习,各年级要强化对学生写字姿势和写字习惯的培养。在教学中,教师要按照识字规律进行指导:写独体字时,要让学生掌握笔画笔顺,关注主笔的占位;写合体字时,要注意部首、比例、占位、相邻部位的交叉等;还要注意学生写字时坐的姿势、执笔的姿势,注意笔顺和结构;要记住,指导学生书写时观察、范写、描红试写、讲评、再写巩固提升5个环节必不可少。 德学兼修的育人坚持。语文学科在育人方面有着独特的优势。因此,我们要充分挖掘统编语文教材的育人因素,依托语文课程的育人优势,落实立德树人的根本任务,将社会主义核心价值观、中华优秀传统文化、良好的思想道德风尚等人文教育内容潜移默化地传授给学生,使他们受到精神的滋养,培养他们自尊自信、勤劳勇敢、自强不息的美好品德。 在新的课程、新的学习方式、新的教学氛围下,我们要引领学生开辟出一片语文学习生活的新天地。

mapgis地图矢量化实验报告心得体会

mapgis地图矢量化实验报告心得体会 篇一:MAPGIS综合实验报告 MAPGIS综合报告 目录 一、实验目的 (02) 二、实验过程 栅格图像配准 (03) 2.图像二值化 (05) 矢量化 (06) 4.图形编辑 (11) 5.属性编辑 (19) 6.图文互查 (21) 7.对说获得的数据进行利用和分析 (24) 8.自定义制图符号 (31) 9.输出不同比例尺地图 (35) 三、实验总结 (41) MAPGIS实验综合报告 一、实验目的。 MAPGIS是通用的工具型地理信息系统软件,具有强大的空间数据的图形显示、各类地图制图的制作功能,作为个来

数学信息的可视化转换工具,可以讲数字形式的地理信息以直观的图形形式在屏幕上显示,能自动进行线段跟踪、结点平差、线段接点裁剪与延伸,多边形拓扑结构的自动生成,还可以消除图幅之间元的街边误差,为地学信息的综合分析提供了一个理想的桌面式地理信息系统。所以,在将图矢量化时应用MAPGIS软件是十分便捷的,同时综合了此软件的基础操作和方法,能培养我们的自出探究能力和中和分析能力。对于我们来说这是我们以后能熟练运用MAPGIS的开始,路还很长,我们需要不断的摸索、不断的钻研才能完全掌握它。下面针对这一次的实验成果中来谈一谈如何运用MAPGIS。 二、实验过程。 栅格图像配准 装载图像 准备工作 使用纸质地图,在扫描仪中扫描为图像 打开MAPGIS“图像处理”——“图像分析”如图所示 如图 在点击图像分析模块的菜单“文件” -> “数据输入”,将其他栅 格图像(mpg,jpg ,tif 等)转换为MapGIS 的栅格图像格式( .msi ),选转换数据类型,点击“添加文

桥梁博士迈达斯使用

家在使用桥博、midas的时候经常会遇到些问题,希望大家把这些问题发出来,省的其他人在犯!! 我先来说几条 A:桥博 0、桥博裂缝输出单位为mm,力输出单位为KN,弯矩输出单位KN*m,应力输出单位Mpa 1、从CAD中往桥博里面导入截面或者模型时,CAD里面的坐标系必须是坐标系。 2、桥博里面整体坐标系是向上为正,所以我们在输荷载的时候如果于整体坐标系相反就要输入负值。 3、从CAD往桥博里导截面时,将截面放入同一图层里面,不同区域用不同颜色区分之。 4、桥博使用阶段单项活载反力未计入冲击系数。 5、桥博使用阶段活载反力已计入1.2的剪力系数。 6、计算横向力分布系数时桥面中线距首梁距离:对于杠杆法和刚性横梁法为桥面的中线到首梁的梁位线处的距离;对于刚接板梁法则为桥面中线到首梁左侧悬臂板外端的距离,用于确定各种活载在影响线上移动的位置。 7、当构件为混凝土构件时,自重系数输入1.04. 8、桥博里通过截面修改来修改截面钢筋时,需将“添加普通钢筋”勾选去掉,在截面里输入需要替换的钢筋就可以把钢筋替换掉。 9、在施工阶段输入施工荷载后,可以通过查看菜单中的“显示容设定”将显示永久荷载勾选上,这样就可以看看输入的荷载位置、方向是否正确。

10、桥博提供自定义截面,但是当使用自定义截面后,显示和计算都很慢,需要耐心。 11、桥博提供材料库定义,建议大家定义前先做一下统一,否则模型拷贝到其他电脑上时材料不认到那时就头疼了。 12、有效宽度输入是比较繁琐的事情,大家可以用脚本数据文件,事先在excel 中把有效宽度计算好,用Ultraedit列选模式往里面粘贴,很方便!! 14、当采用直线编辑器中的抛物线建立模型时,需要3个控制截面,第一个控制截面无所谓,第二个控制截面向后抛,第三个控制截面向前抛,桥博里面默认的是二次抛物线!! 15、当采用直线编辑器建立模型时,控制截面要求点数必须一致,否则告诉你截面不一致。 16、修改斜拉索面积时用斜拉索单元编辑器,在拉锁面积里需要输入拉索个数*单根拉索的面积。 17、挂篮操作的基本原理: 挂篮的基本操作为:安装挂篮(挂篮参与结构受力同时计入自重效应)、挂篮加载(浇筑混凝土)、转移锚固(挂篮退出结构受力、释放挂篮力及转移拉索索力)和拆除挂篮(消除其自重效应)。具体计算过程如下: ) 前支点挂篮:(一般用于斜拉桥悬臂施工) )如果挂篮被拆除,则挂篮单元退出工作,消除其自重效应。)如果挂篮转移锚固,则挂篮单元退出工作,释放挂篮力,并将拉索索力转到主梁上。 )如果安装挂篮,则将挂篮单元置为工作单元并与主梁联结,计算挂篮

桥梁博士+系+列+教+程(盖梁)

桥梁博士系列教程—小箱梁或T梁盖梁计算 上海同豪土木工程咨询有限公司 2008-4-22 教程概述

本例主要介绍利用桥梁博士对桥墩盖梁进行计算的过程和方法,重点在于虚拟桥面入盖梁活载的加载处理。 进行盖梁计算主要由以下几个步骤: 桥墩盖梁的结构离散(划分单元) 输入总体信息 输入单元信息 输入施工信息 输入使用信息 执行项目计算 查阅计算结果 本例教程桥墩构造参数

一、结构离散 首先对盖梁进行结构离散,即划分单元建立盖梁模型,原则是在支座处、柱顶、特征断面(跨中、1/4)处均需设置节点。如果需要考虑墩柱和盖梁的框架作用,还需要把墩柱建立进来;柱底的边界条件视情况而定,如果是整体承台或系梁连接,可视为柱底固结;如果是无系梁的桩柱,可以将桩使用弹性支撑或等代模型的方式来模拟。 二、输入总体信息 计算类型为:全桥结构全安计算 计算内容:勾选计算活载 桥梁环境:相对湿度为0.6 规范选择中交04规范。

输入单元信息,建立墩柱、盖梁及垫石单元模型,对于T 梁或小箱梁,因为支座间距比较大不能将车轮直接作用在盖梁上,我们还需要在盖梁上设置虚拟桥面单元来模拟车道面,与盖梁采用主从约束来连接,虚拟桥面连续梁的刚度至少大于盖梁的100倍。建立模型如下: 虚拟桥面为连续梁时,刚度可在特征系数里修改。

第一施工阶段:安装所有杆件 添加边界条件 添加虚拟桥面与盖梁的主从约束:虚拟桥面与盖梁的主从约束需要使用两种情况分别模拟:虚拟桥面简支梁和虚拟桥面连续梁;这两种方法分别是模拟墩台手册中的杠杆法和偏心受压法;其目的是杠杆法控制正弯矩截面;偏心受压法控制负弯矩截面。

参考文献管理软件的发展过程

参考文献管理软件的发展过程 参考文献管理软件是一种用于帮助科研人员组织、管理与课题相关的参考文献,建立个人参考文献数据库, 并进行论文写作的软件。截止目前参考文献管理软件已经经历了2个发展阶段。 第一代:单机版参考文献管理软件 第一代参考文献管理软件的特点是单机版软件。用户安装软件后只能在自己的计算机上使用。第一代参考文献管理软件的典型产品为2001年发布的EndNote 5.0。经过了近10年的发展,第一代参考文献管理软件在功能上也有了长足的进步,重复文献去重、题录自动更新、全文自动下载等功能都在不同程度得到了支持。 第一代参考文献管理软件的缺点就是个人数据库维护和转移比较困难。如果用户在计算机A录入了自己的参考文献信息,就只能在计算机A上使用。如果要在计算机B上使用这些已经有的数据,就需要通过导出导入的方式,把计算机A上文献信息手工导入到计算机B 上,这对于既要在办公室工作又要在家里工作的科技人员来说,保持不同计算机上的数据同步是一件很麻烦的事情。 目前国内开发的几款参考文献管理软件如医学文献王,NoteExpress等都属于第一代单机版软件。

第二代:Intranet版参考文献管理软件 第二代参考文献管理软件和第一代参考文献管理软件相比,最大的特点就是将单机版变为了机构内部网络版。代表产品是2008年发布的EndNote Web版。 第二代参考文献管理软件解决了机构内同一用户的不同计算机题录信息的同步问题。其实现方法在原来单机版软件的基础上,提供了机构内部网络服务功能。但是该产品的局限性就是用户所在机构必须购买ISI数据库以及Web服务器等产品。如果科技人员所服务机构没有购买这样的产品,就只好望洋兴叹。第二代参考文献管理软件在功能上有了进一步的扩充,包括群组的交流和群组内文献的共享。 截止目前,国内还没有见到第二代参考文献管理软件产品发布。 NoteFirst:新一代Internet版参考文献管理软件 在互联网高度发展的时代,科技人员需要更便捷的参考文献管理软件和服务。NoteFirst 是由知先信息技术有限公司自主研发的新一代参考文献管理软件。NoteFirst是一款基于互联网设计的文献管理软件,用户可以在个人计算机和互联网之间自由迁移自己的参考文献数据库,以及在个人计算机和网络之间保持数据的同步。最重要的是NoteFirst的使用没有其他任何限制,不受机构是否购买软件的限制,即便是脱离学校和单位的个人作者也可以随时随地使用。

统编教材使用心得体会

一年级语文统编教材教学心得 今年暑假,我参加了在青阳三中举办的统编人教版新教材培训,听了四位老师的精彩讲座,我对新教材有了一个初步的认识:统编版一年级语文教材更重视学生的发展,着重于学生的情感体验,更符合一年级学生的身心发展特点。九月开学,我有幸成为一年级的语文老师,经过这将近两个月的教学和学习,我对新教材的认识逐步加深了,下面我就结合自己的教学实际谈谈体会,如有不妥,请大家批评和指正。 一、新教材的几点变化 新教材中添加了很多的插图,图片的类型丰富,提高了孩子们的学习兴趣,加强了幼小衔接。“识字加油站”、“快乐读书吧”和“和大人一起读”,这几个板块的编排也是从学生实际出发。识字加油站采用灵活多样的方式识字,分担了课文识字的教学任务,把使用频率高但又不好在课文中呈现的字编排起来,这样就有利于和学前教育衔接,引导孩子从口语过度到书面语,引导学生读书的兴趣。“快乐读书吧”“和大人一起读”实现课外阅读课内化,课外阅读课程化,让教材往课外阅读延伸,往孩子的语文生活延伸。看得出来,语文学习越来越重视孩子的阅读能力。作为我们一线老师要利用好教材中这两个板块引导学生要大量阅读,让孩子养成阅读的好习惯,充分的调动家庭教育的力量。新教材的课程还有一些调整:先识字再学拼音,这也是幼小衔接的表现,同时也体现了识字的重要,在第一单元的识字课中还有效的渗透了中华传统文化,例如第一课《天地人》看似简单的六个字,却渗透着中华传统文化天人合一的思想,蕴含着人与自然,人与人之间和谐相处的理念。总之新教材的内容更尊重儿童的天性,更加贴近学生的生活,更多地引导学生去发现,去自主的探究。比如口语交际,从交际的实际入手,通过儿童最喜欢的游戏入手,让他们在游戏中发现交际的最基本要求。 二、使用新教材的点滴思考 1、充分利用好课文插图 为了增加教学趣味性,编者们针对每一课的内容都精心挑选了插图,,作为我们一线的教师绝不能辜负编者们地良苦用心,应该充分利用好这些插图。例如《日月水火》的插图,通过实物以及象形文字这些直观的表象来识字,既符合现阶段孩子的思维方式又可以通过图片提高他们的识字兴趣。再例如《口耳目》的插图,教师可以让学生观察插图发挥想象,想想三个小朋友都看到了什么?听到了什么?他们说了些什么,又做了些什么?通过插图有意识地培养学生地观察能力,思维能力和说话能力。在拼音教学时,我们要充分利用情境插图来引导学生学习。引导他们在情景图中找字母,发现图画和字母的共同点,从而巩固字形;还可以根据插图中字形组织学生在活动和游戏中学习比如和同桌做手指操,我们还可以根据情景图来安排孩子们最喜欢的活动——讲故事,老师可以先讲个故事做示范,再引导高能力的学生自己编故事。将本课所学的拼音有效的融入故事,让学生在听故事的过程中去发现。 2、以学生为主 学生是学习的主体,我们要尊重儿童的天性,将我们教学内容回归儿童的生活创设真实的情境。例如口语交际一《我说你做》,游戏是儿童生活中不可缺少的部分,通过真实的游戏环节孩子明白发指令的人要大声说,被别人听到,其他

小学语文统编教材培训心得体会新编

小学语文统编教材培训心得体会 培训地点:单甲完小培训日期:2017.9.8 参训人:冯瑞仙根据《教育部办公厅关于加强义务教育道德与法治、语文、历史学科教师培训工作的通知》及教育部关于统编三科教材培训工作方案要求,为使广大教师正确理解、把握统编教材在全面融入社会主义核心价值观等方面的编写思路,实现统编教材教师全员培训的目标,单甲乡小学在2017年9月8日全天进行了教材网络培训。经过一天的培训,我神的体会: 本次网络培训由开幕式、专家讲座、互动答疑三个版块组成。认真听取专家解读教材编写思路以及教学建议,学以致用,指导我们平时的教学。 开幕式由全国小语会会长陈先云先生主持,他围绕部编版小学语文教材的编写思路、总体特色和创新点进行了介绍。《语文》教材网络直播培训会以人民教育出版社编审、教育部课程教材研究所研究员陈先云的“六个变化”拉开序幕。他提出新版统编语文教材主要有以下六个变化: (1)部编教材安排先识字后学拼音; (2)部编教材对于孩子的识字量要求有所减少; (3)部编教材对于孩子的写字量要求有所减少; (4)部编教材大幅度增加了古诗文的数量; (5)部编语文教材首次实现了课外阅读课程化; (6)部编教材关于课后作业要求更明确;

接着,老师们观看了郑宁教授讲座的《统篇教材的编写理念》。通过讲座的学习使大家了解到二年级语文新编义务教育语文教材在 专家讲座中的编排特点和教材亮点。明确了在教学中如何全面贯彻党的教育方针,遵循语文教育的基本规律,继承我国语文教育的优良传统,让语文老师不再纠结于“教教材”与“用教材教”。统编教材的编写围绕人文主题和语文要素,从儿童的现实世界和童真世界出发,图文并茂,版式多样,风格活泼,色彩明丽,激发了孩子的学习兴趣。统编教材以德育为魂、能力为重、基础为先、创新为上,注重继承与弘扬中华民族优秀文化和革命传统,有助于增强学生的民族自尊心和爱国主义情感。 首先,通过郑宇老师分析,我对教材有了一个新的认识。教材的编写以儿童的现实生活和童真世界出发,图文并茂,版式多样,风格活泼,色彩明丽,能够吸引学生阅读,激发学习的兴趣。新教材的内容更加的贴近学生的生活,尊重儿童的天性,引导学生去发现,去自主的探究。比如口语交际,通过儿童最喜欢的游戏入手,让他们在游戏中发现交际的最基本要求,声音要让别人听到,要懂得认真听。因此,教材不仅关注基础知识和基础技能,还关注学生的情感、态度和价值观。我们应当理解教学目标,明白教材编排的意图和特点,选用恰当的手段,激发学习的兴趣,使学生积极主动的参与到教学中来。其次,帅晓梅老师对语文新教材的编写理念以及教学策略进行了详细的讲解,使我们全面地了解了新教材的内容,

桥梁博士使用入门

1.1 项目组操作 1.新建项目组 ●从主菜单中选择文件>新建项目组;或<快捷键>:[Alt]+F>[Ctrl]+W。 ●显示名称为“新项目组”,右击项目组显示名称,在菜单中选择“标签重命名”(如 图错误!文档中没有指定样式的文字。-1所示),输入项目组显示名称,单击确 定。 图错误!文档中没有指定样式的文字。-1创建项目组 2.打开项目组 ●从主菜单中选择文件>打开项目组;或<快捷键>:[Alt]+F>[Ctrl]+G。 ●将弹出图错误!文档中没有指定样式的文字。-2所示对话框,选择项目组或项目 文件,打开。 图错误!文档中没有指定样式的文字。-2选择项目组文件对话框

●项目组文件后缀为pjw。 ●若打开项目文件(文件后缀为prj),此时将自动生成一同名的项目组文件。 3.关闭项目组 ●从主菜单选择文件>关闭项目组;或<快捷键>:[Alt]+F>[Ctrl]+L。 ●如果工程数据经过修改,关闭前会弹出对话框,询问是否保存已作的修改。 ●在关闭新项目组时,用户还需要指定这个项目组的存储文件名和存储路径。 ●关闭项目组后,桥梁博士恢复默认的窗口。 4.保存项目组 ●从主菜单选择文件>保存项目组;或<快捷键>:[Alt]+F>[Ctrl]+F ●输入文件名并选择保存目录,然后单击保存。 5.另存项目组 ●以另外一个文件名保存当前项目组。 ●从主菜单选择文件>项目组另存为;或<快捷键>:[Alt]+F>[Ctrl]+B。 ●输入文件名并选择保存目录,然后单击保存。 图错误!文档中没有指定样式的文字。-3保存项目组文件对话框 6.显隐项目组 ●从主菜单选择查看>项目组;或单击工具栏按钮“”,切换显示和隐藏项目管 理组窗口。 图错误!文档中没有指定样式的文字。-4项目组窗口 7.项目的快捷操作 ●选中项目单击鼠标右键,弹出右键菜单,可进行多项快捷操作:

文献管理与文献信息分析 学后感

(理工类) 课程名称:文献管理与信息分析专业班级:13软件工程1班学生学号: 1305104002 学生姓名:徐阳 所属院部:软件工程学院指导教师:罗绍峰 20 14 ——20 15 学年第一学期 金陵科技学院教务处制 文献管理和信息分析课程感悟

“文献管理与信息分析”课程是针对网络时代的个人信息需求设计。 社会的发展伴随着信息存储方式和传播方式的深刻变革。现代社会发展越来越快,背后根本的原因在于信息传播速度加快。这种变化,对人们获取信息和处理信息的能力提出了新的需求,对各行各业提出了新的挑战。我们认为,作为信息社会的一员,要想领先他人一步,应该具备以下四个方面的技能,才能更好地适应社会发展的步伐。一、信息获取不管什么行业,要想做到出色,要想进行创新,我们必须做到知己知彼。这种知己知彼的过程就是一个全面的信息调研过程。网络正在改变我们学习和工作的方式。现在,当我们碰到不懂的问题,首先想到的就是求助于网络,求助于搜索引擎。因此,网络利用的能力极大地影响了我们的学习能力和解决问题的能力。这一部分中主要介绍以下内容:1. 网络信息的组织及其发展趋势,以及如何高效利用网络上的信息;2. 如何有效利用搜索引擎;3. 如何利用各种事实数据库和文献数据库;(适合科研人员)4. 如何同步追踪大量的文献信息和生活信息等。二、信息管理我们阅读的信息多了,自然需要管理的信息也就多了;生活节奏加快了,我们更加忙碌,我们需要记住的各种碎片化的信息也越来越多了。这部分主要介绍以下几方面内容:1. 如何有效管理海量的文献;(适合科研人员和文献工作者)2. 如何管理你闪光的想法,如何管理生活中所有见到、听到、想到的碎片化信息,从而将自己的大脑从琐碎的记忆中解放出来; 3. 如何管理你电脑中的海量文件。三、文献信息分析当我们面对海量的文献信息,最让我们纠结的问题是什么?——那就是到底哪篇才是我真正想看的,哪篇才是这个领域最核心的文献?如果能从大量的文献中快速定位出核心的文献,而不至于在大量低价值的文献中迷失。这部分内容介绍:如何利用引文分析软件HistCite快速定位出关键的文献,让你的文献调研工作事半功倍。(这部分内容对科研人员极其重要,对其它行业帮助不大。这部分内容是整个课程中普适性相对低一点的)四、分享、协作、创新网络技术的发展已经改变了我们生活的方方面面。如何获得好的思路,如何开展分享和协同工作,如何提升阅读文献、撰写论文报告的效率,如何借助一些云端工具提升自己和团队的工作效率。 课程开始介绍的各类数据库是大学生和研究人员接触最多、学术密度最大的信息和文献来源。我的感触是,平时我使用的多是中文的数据库,对外文数据库接触较少。通过这次课程,接触了一些外文数据库,对于以后拓宽信息和文献来源以及研究领域非常有帮助。 看完罗绍峰老师的课程之后,感觉电脑里面的文件不是很乱,比起以前漫无目的的寻找一些感兴趣的内容,现在的我可以通过RSS订阅来屏蔽掉不相干的内容,准确有效的获取想要的内容,节省了不少的时间。最近复习迎考,平时的知识点整理的不是很清楚,我用我最喜欢的工具mindmagner将我的知识点转化成思维导图,能够很有效的帮助我学习。 我现在在用的软件还有一个就是为知笔记,不仅仅是在电脑上面能够使用,它可以多平台使用,最近我们班在做软件需求分析的需求文档,一个小组的笔记都可以通过为知笔记进行分享,很是实用,为知笔记定位于高效率工作笔记,主打工作笔记的移动应用,是目前国内唯一一款“工作笔记”的云笔记类产品。除了常用的笔记功能保存的网页、灵感笔记、重要文档、照片、便签等,为知笔记重点关注“工作笔记”和“团队协作”这两个方面,解决团队记录和团队协作沟通的需求。不仅仅是团队合作,在个人的记录中,为知笔记也占了很大一部分。 平时采用win7自带的搜索,搜索的效率很差,但是用了everything这个软

小学语文统编教材培训心得体会

小学语文统编教材培训心得体会小学语文统编教材培训心得体会3篇 心得体会1 由XX校举行的小学语文部编教材培训活动在我校举行,我有幸参加了此次学习。在1上午的学习中,我凝听了教育专家XX老师有关人教版1年级语文新教材的解读。通过学习使我对1年级人教版新教材有了1个更新的认识,从而让我晓得了怎样才更好的掌控好教材,如何有效的去教,下面就谈谈几点我的学习体会: 1.在本次培训中,专家教师主要从识字教学、写字教学、浏览教学、口语交际等方面进行培训指点,刚开始我对教材的认识没有那末的精深,不过听了专家老师的详细分析,从教材以专题组织单元,整合的方式组织教材内容编排特点。并且要注意掌控本组教材各部份内容之间的联系。这1点,让我在潜意识中明白了1个道理,要想拉近课本与学生的关系,首先要吃透教材,才能在这个基础上创造性地使用教材。在使用教材的同时,我们也要注意教学内容提示及1些教学中所要注意的问题。如:识字课。我们要了解它的编写情势、特点。 1)、内容与专题紧密联系。 2)情势多样,体现出要对中华优秀文化的传承与宏扬。 3)采取韵文的情势编写,易于朗诵。特别是低年级的小学生,我们要充分地发挥课文中的插图作用,借助图画猜识生字,读通句子。必要时,我们可以采取合作的学习方式,把课文读通顺。老师绝对不能包办代替学生,而是加强引导学生注意发现的层次性,将发现的识字方法迁移到学习中,让他们自己动手操作和鼓励他们独立完成。不过要时时对生字进行温习和巩固。 2.

结合拼音认识汉字、学习词语和童谣, 提倡学以致用,强调拼音的实用价值。教材提倡学用结合,在应用中学习。教材中安排了词语和童谣,并且结合词语和童谣的学习认识几个汉字。这些词语,都是由学生学过的音节组成的经常使用词语,每课的几个词语之间存在着内在的逻辑关系,可使学生初步感知语言特点。所选的童谣也都包括本课新学的音节。这些词语和童谣,为学生巩固拼音、温习本课和前面学过的字母和音节提供了语境,体现了拼音学习的工具价值,同时引导学生积累语言,构成初步的语感。 3.牢固建立生活语文的理念,将语文教学由课内拓展到课外。首先,要更新理念,建立正确的语文教育观。要把学生从沉重的课业负担中解放出来,让学生“少做题,多读书”,让学生成为安排课余时间的主人。教学中要强调“精讲”,使学生能在课内完成大部份作业。如果我们用大量的作业把学生课余的时间塞得满满的,学生便丧失了自我发展的空间,窒息了学生的灵性,抹杀了学生的创造力。生活即课堂。培养学生具有平常口语交际能力,也只有在平常生活中不断实践,反复历练,把生活所得的1点1滴积累起来,才会构成1个人的口语交际能力。所以,教师要打破课内课外的界限,建立大语文观,生活处处有语文,把口语交际的课堂延伸到学生5彩斑斓的生活当中,关注自然,关注生活,关注社会。 4.重视交际习惯和交际意识的培养。教材重视培养学生的交际习惯和交际意识,斟酌学生出发点,着力改进学生平常交际中可能存在的问题,如缺少交际意识、不斟酌对象场合等不良交际习惯。教材中的几次口语交际活动,让学生在不同的交际情境中实践最基本的人际交往原则:相互尊重。这是展开口语交际活动的基点,是需要从1开始就着力培养的交际习惯。

mapgis-学习难点

利用MapGis进行屏幕跟踪矢量化 > 1.利用MAPGIS矢量化作图。 > 1.1启动MAPGIS(方法过程见上一次实验)。 > 1.2进行输入编辑窗口。 > > (1)点击“取消”。 > (2)点击“新建工程工具”、“确定”、“点选生成不可编辑项”、“确定” > > (3)最大化地图窗口,并将空工程文件保存为“实习二”。 > > (4)装入光栅文件“80-14.tif”。 > > (5)光栅文件求反,并将屏幕放大到适当大小。 > > (6)可利用移动窗口工具拖动窗口,以查看图形的其它部分。 > > (7) 通过对查看,以达到判图识图并对图形要素进行分层的目的,对于点要素我们可以分为注示层和权属拐点层,对于线要素我们可以分为线状地物层、权属界线层和地类界三个层次。 > (8)在控制台窗口点击右键,利用快捷菜单新建两个点文件和三个线文件。 > > 最后得: > > (9)在控制台窗口可以通过拖动项目改变其位置,则我们将线文件拖到上层,点文件放在下层。 > > 1.3新建并打开图例板。 > (1)在工程窗口新建图例 > > (2)新建“注示”的图例。 > 在“图例类型”选择框中选择“点类型图例”,并在“名称”栏中输入“注示”。 > > 点击“图例参数”按钮,输入如下参数,最后点击“确定”键确认。 > > 最后点击“插入”按钮,完成“注示”图例的设置。 > > (3)新建“权属拐点”图例的过程见下列图解: > > (4) 线状地物包括铁路、公路、农村道路、沟渠等,以农村道路为例,建立图例图解如下。> “图例类型”选“线类型图例”。 >

> “图例名称”填入“农村道路” > > 设置“图例参数” > 其它线状地物的设置同上,其参数见下图: > 铁路: > > 公路: > > 沟渠: > > (5)权属界线的定义方法同上,其参数分别为: > 村界: > > 乡界: > > 县界: > > (6)地类界线的定义方法同上,其参数为: > > (7)以上的参数定义好之后,点击“确定”按钮确认我们的操作,系统会提示我们保存图例文件。 > > (8)将工程文件与图例文件关联在一起才能使用图例板,方法是在控制台窗口的右键菜单中关联图例文件。 > (9)打开图例文件(控制台窗口的右键菜单中)。 > > 1.4光栅矢量化方法输入数据。 > (1)选中将要输入数据的层,将其设为当前可编辑。 > > (2)在图例板上选中要输入的线型。 > > (3)在工具栏上点击交互式矢量化按钮。 > > (4)mapgis的功能键定义分别为: > F4键(高程递加):这个功能是供进行高程线矢量化时,为各条线的高程属性进行赋值时使用的。在设置了高程矢量化参数后,每按一次F4键,当前高程值就递加一个增量。 > F5键(放大屏幕):以当前光标为中心放大屏幕内容。 > F6键(移动屏幕):以当前光标为中心移动屏幕。 > F7键(缩小屏幕):以当前光标为中心缩小屏幕内容。 > F8键(加点):用来控制在矢量跟踪过程中需要加点的操作。按一次F8键,就在当前光标处加一点。 > F9键(退点):用来控制在矢量跟踪过程中需要退点的操作,每按一次F9键,就退一点。

常见文献管理软件的比较

博客首页 微博:最火交流工具看明星动态 登录 注册 发博文 博文 九歌的BLOG https://www.wendangku.net/doc/b116952278.html,/madh[订阅][手机订阅] 首页 博文目录 图片 关于我 个人资料 九歌进入我的空间 播客微博 加好友发纸条 写留言加关注 博客等级:读取中… 博客积分:445 博客访问:读取中… 关注人气:6 相关博文 七夕涂鸦活动火热进行中 新浪官博 2010年08月17日 沙黾农 有家公司…… 李承鹏 适宜于夜间参观的五大世博园场 马善记 男人不装

洪晃在ilook 舟曲灾区震撼世界的二十双手(丑鱼尼莫 书评:袁世凯怎么写成“绝版”萨苏 宏皓:新股破发实是巧取豪夺民间股王宏皓 根治鼻炎有新招(针对此次事件乔任梁_KIMI 多种点树少造点孽吧 郎险峰 8月17日股市直播 徐湘毅 在泰国逛夜市 世上最小的企鹅 80后大学生山村资教 少儿英语大赛现场秀

农村小学的图书馆 最可爱的孩子 更多>> 推荐博文 相逢是首歌——杜比夏令营现在姜丰 于娜成为《婚姻保卫战》主演的马善记 节能低碳30个小窍门大盘点 寒寒 留学申请:该不该相信中介? 四眼先生 高音王子朱智犯了三个错误(图) 马善记 别钻了高考落榜的牛角尖 宋客 赐子千金不如赐子佳名 笑晚 13岁海外留学成为小混混悲剧了爱和自由 穿澳77:澳洲名校女孩分享职业

张杨Alex 马友友的丝绸之路–展现 智陈博士 查看更多>> 谁看过这篇博文 加载中… 正文 字体大小:大中小 常见文献管理软件的比较(2008-04-07 19:48:54) 标签:杂谈教育文化科学知识/探索分类:科研工具 常见文献管理软件有汤姆森公司的Endnote,Referencemanager,procite以及基于网络的refworks。其中EndNote是最受欢迎最好用的软件,ReferenceManager提供网络功能可同时读写数据库,ProCite提供弹性的群组参考及可建立主题书目,WriteNote是基于Web的EndNote。中文文献管理软件中,有NoteExpress、文献之星、医学文献王、PowerRef等,其中NoteExpress是目前较好的中文文献管理软件。 文献管理软件基本都有这几个功能: 1 建立属于自己的参考文献数据库。多种导入方式参考文献数据库(包括互联网上数以千计的国内外电子图书馆、国内外各大主流数据库在线导入、Google学术搜索在线导入、本地文件导入、手动输入等),可以分门别类(按总目录-分目录-子目录)管理文献(包括电子书),并能加以整合,剔除重复信息。数据库容易携带,备份。 2 方便地阅读和编辑参考文献信息。参考文献可以与本地电脑中的PDF原文建立关联,对其进行管理。方便地检索数据库中的文献,进行一定的统计分析。 3 方便地在word中插入所引用的文献(安装完成后在word中出现一个工具条)软件自动根据文献出现的先后顺序编号,并根据指定的格式(有国外N多期刊杂志模板,也可自定义)将引用的文献附在文章的最后。如果在文章中间插入了引用的新文献,软件将自动更新编号,并将引用的文献插入到文章最后参考文献中的适当的位置。 EndNote(EN) 是汤姆森公司(Thomson)推出的最受欢迎的一款文献管理软件。一两年之前在中国,和Biblioscape两个软件几乎就是参考文献管理软件的代名词。近期国产软件崛起,其影响才略微衰减。目前最新版本号为EndNote.X1.v11.0.0.2566。网上多是英文版,也有个别人自己做的汉化补丁。 优点:(1)参考文献可以与本地电脑中的PDF原文建立关联,对其进行管理。

MAPGIS实习心得(小组)

一、实习时间和实习地点: 2014—2015学年第一学期第十七至十八周,实习地点学校机房 二、实验目的与要求 1.掌握工程图例板制作、使用和编辑方法。 2.掌握点、线、区输入方法和相应参数的设置 3.掌握线的交互式矢量化方法。 4.掌握点、线的常用编辑方法。 5.掌握MAPGIS中拓扑造区的基本流程及操作。 6.掌握注释赋属性功能。 三、实验步骤与内容 1、实习准备,熟悉基本操作 1、安装及打开MAPGIS软件:根据提示安装软件。安装软件后, 打开“DogServer67.exe”,再打开MAPGIS软件。 2、设置:单击MAPGIS主菜单中的“设置”按钮。将工作目录设置 为“D:\学生\201220280103”,矢量字库目录设置为“D:\学生\试题\CLIB”,系统库目录设置为“D:\学生\试题\江西二调Slib_2008”。 3.创建文件 (1)执行如下命令:图形处理?输入编辑?新建工程?确定?不生成可编辑项?确定。

(2)在输入编辑子系统界面在右侧窗口中点击鼠标右键,新建一个文件“地质界线.WL”、并且修改其属性结构(需注意,编辑完最后一项时需按下“ENTER”键转到下一行再保存)。 (3)工程图例板制作 1)在输入编辑子系统界面在右侧窗口中点击鼠标右键,单击新建工程图例编辑?编辑分类。 2)新建一个线类型图例(名称“地质界线”,分类码为“1”,编码为“1”,图形参数如图b所示)。 (b)(c) 4)点击“确定”按钮,保存工程图例文件为“工程文件.cln”。2、空间数据输入与编辑 1.打开“工程文件MPJ”,在输入编辑子系统界面在右侧窗口中点击鼠标右键?添加项目“地质界线.WL”、并使之处于编辑状态同时

桥博操作流程-心得

桥博操作流程 一、准备工作: 1.控制点的模型断面:使用AutoCAD以mm为单位绘制,将断面 放臵在同一个图层当中。 2.钢束:使用AutoCAD以mm为单位绘制,首先绘制梁板外框线, 然后按给定的纵横坐标(或两直线夹圆曲线半径等数据,以画圆中C→T命令)绘制钢束,将钢束设臵成红色,并且将每一根钢束放臵于一个图层中。全部绘制完毕后将整体图形的左上角点移至原点。当然,这是基于建模的参考基准点考虑的。 3.节点和单元:将梁板按支座位臵、横隔板位臵、区段小于1 米来划分控制断面。 二、桥博建模、计算: 1.打开桥梁博士3. 2.0。 2.创建新项目组。 3.点击项目→创建项目,填写项目名称,选择项目类型,点击 确定。 4.点击复制项目组保存至你想存的文件夹当中,并取合适的文 件名。 5.在工程描述中填写此次计算的相关内容。 6.在结构备忘描述中填写要计算的部位,为以后方便查看。 7.选择计算类别。

8.勾选计算内容。 9.填写结构重要性系数,按照《公路桥涵设计通用规范》(JTG D60-2004)4.1.6条和1.0.9条取用。 10.选择规范:是按旧规范还是新规范执行。 11.右键单击选择单元信息。 12.勾选单元性质,是否为全预应力构件、现场浇筑构件、桥 面单元。 13.填写自重系数:按照计算的构件砼相对C25容重比值。 14.右键单击选择从AutoCAD导入截面,图层名称一定要与CAD 中图层名称一致。其他参数不用修改直接点击确定。 15.选择快速编辑中“直线”,开始建模。 16.在直线单元编辑中勾选全部编辑内容。填写起终点的(X, Y)值,一般起点为(0,0),终点为(预制长度,0)。然后按照模型是否为变化截面来添加“控制点断面定义”。注意截面特征可以在控制点处添加修改。此处注意附加截面(湿接缝)的设臵,只与长高有关,与位臵无关;可按湿接缝总长和单高填写,一般为矩形。 17.编辑单元号:划分几个单元即为几个单元号,格式为1-N。 18.编辑左节点号:1-N。 19.编辑右节点号:1-(N+1)。 20.分段长度:按分段长度填写,中间用空格。如0.38 2*0.56 0.5 6*0.53 10*0.96 6*0.53 0.5 2*0.56 0.38。

文献管理软件Endnote 和NoteExpress介绍和比较

文献管理软件Endnote X5和NoteExpress 介绍和比较 (另附三本经典图书下载) 文献管理软件Endnote X5介绍Endnote是Thomson公司的产品,一款很受欢迎的文献管理软件,Endnote X5 是该款软件目前最新的一个版本。 该软件通过将不同来源的文献信息下载到本地,建立本地数据库,从而实现对文献信息的管理和使用;与Microsoft Word相嵌合,为论文、报告中参考文献的引入提供方便。 四大作用: 一、收集文献 1.建立library——存放收集到的文献的PDF全文、图片、表格等资料 2.导入文献——数据库检索导入、搜索引擎导入、直接从Endnote 远程连接导入、手工导入 二、管理文献 1添加文献条录相关信息:PDF、图片等 2编辑 3检索 4分组 5查重 6共享相关文献 三、学习文献 1随时学习个人图书馆内的文献,做学习笔记; 2分析文献,发现文献间的关联,供进一步的研究使用 四、利用文献 1方便地使用期刊模板撰写论文,方便投稿 2按照期刊要求的格式,方便地插入参考文献, 3自动生成参考文献列表

文献管理软件NoteExpress 介绍NoteExpress由北京爱琴海软件公司开发,针对研究人员在文献管理方面的实际需求,该软件提供了完整的解决方案。 一.检索:快速检索高品质的文献资料 通过NoteExpress可以直接检索全球数以百计的图书馆和电子数据库。 二.管理:有效管理海量文献资料 方便对百万计的电子文献进行管理,并可按不同研究方向分门别类,按照年份、作者、标题等排序。 - 三.分析:量化分析检索结果 对题录信息进行多字段统计分析,使您快速了解某领域内的重要专家、研究机构和研究热点等。 四.发现:做出卓越发现 笔记模块方便您随时记录阅读文献时的思想火花,高效有序地管理笔记,方便以后查看;检索条件可以长期保存,自动推送符合条件的文献,方便追踪研究动态。 五.写作:规范写作和提高效率 利用NE撰写论文时可自动生成符合要求的参考文献列表。NE内置3000多种国内外学术期刊和高校论文参考文献格式,并支持不同参考文献格式一键转换。 NoteExpress软件下载地址: 北京爱琴海软件公司网站 https://www.wendangku.net/doc/b116952278.html,/CompanyWeb/download.do----个人版免费下载说明:两种文献管理软件比较: Not eExpress是国产软件,北京爱琴海软件公司开发,功能较EndNote 丰富,容易上手,对中文环境支持好,与Word兼容较好。 EndNote是文献管理软件中的“元老”,Thomson出品,搜索查询方

相关文档
相关文档 最新文档