`
uro494zq
  • 浏览: 16379 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

在 Android 平台上应用 Berkeley DB 11gR2 SQL(drop-in模式)(转http://www.cnmsdn.com/html/201004/1270362092ID3134.html)

 
阅读更多

在 Android 平台上应用 Berkeley DB 11gR2 SQL(drop-in模式)(转http://www.cnmsdn.com/html/201004/1270362092ID3134.html)
2010年10月17日
  前文我们介绍了如何编译Berkeley DB SQL(BDB SQL)库并放到Android平台上使用。现在我们来介绍另一种更为彻底的使用方式。依本方法编译得到的BDB库将完全替换Android的 SQLite库,我们称其为drop-in模式。在这种模式下,Android平台上所有的应用程序(包括我们自己编译的应用程序)都将链接到BDB SQL库以获取更高的存储和并发性能。
  本文将使用完整的Android源代码来编译构建我们的全新Android系统镜像,而Android源代码包中包含了交叉编译器,因此我们不需要事先安装NDK。
  1. 编译Android代码
  从Android官方网站获取一份Android源代码,这份源代码有2~3G之巨。
  在Linux平台上,把源代码解压到$HOME/android/android_src
  安装java 1.5版本,(1.6不行),并设置JAVA_HOME和PATH:
  $ export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
  $ export PATH=$JAVA_HOME/bin:$PATH
  先把原始的Android代码完全编译成功(这过程可能要花2~3小时):
  $ cd $HOME/android/android_src
  $ . build/envsetup.sh
  $ make
  可看到生成三个镜像:
  Install system fs image: out/target/product/generic/system.img
  Target ram disk: out/target/product/generic/ramdisk.img
  Target userdata fs image: out/target/product/generic/userdata.img
  2. 安装Android SDK并测试镜像
  安装Android SDK: http://developer.android.com/sdk/installing.html, 安装目录:$HOME/android/android-sdk-linux_86
  安装Android SDK组件: http://developer.android.com/sdk/adding-components .html,选择安装SDK Platform Android 2.1 API 7和Google APIs by Google Inc., Android API 7
  用我们编译得到的镜像替换系统的默认镜像。如果需要替换Windows环境下的sdk,那么以下目录"android-sdk-linux_86″相应应该改成 "android-sdk-windows"。
  $ cd $HOME/android/android-sdk-linux_86/platforms/andro id-2.1
  $ cp -r images images.bak
  $ cp $HOME/android/android_src/out/target/product/gener ic/*.img images
  创建并运行一个新的设备:
  $ cd $HOME/android/android-sdk-linux_86/tools/
  接上页
  $ ./android 
  
  (如图)使用图形界面工具创建一个Android 2.1的设备BDBSQL,并点击"start"启动。新的设备第一次启动的时间会非常长,这是正常现象。等到Android界面出现,就说明我们的镜像编译基本没问题了。接下来我们进一步把SQLite库替换为BDB。
  3. 编译BDB SQL
  从http://www.oracle.com/technology/software/products /berkeley-db/index.html下载BDB 11gR2源文件(db-5.0.x.tar.gz),然后
  $ cd $HOME/android/android_src/external/sqlite/dist
  $ tar zxvf db-5.0.x.tar.gz
  $ cp Android.mk Android.mk.bak
  $ cp db-5.0.x/build_android/Android.mk .
  编辑Android.mk,默认的BDB Log和Region文件大小总和可达到十几兆,因此我们有必要修改Android.mk来减小它(可能需要为Android.mk去掉只读属性)。修改第一处LOCAL_CFLAGS如下所示(相对于默认配置,我们删除了-DSQLITE_OMIT_TRUNCATE_OPTIMIZATION,新增了 -DSQLITE_DEFAULT_CACHE_SIZE=256 -DBDBSQL_MAX_LOCKS=1000 -DBDBSQL_MAX_LOCK_OBJECTS=1000):
  LOCAL_CFLAGS += -Wall -DHAVE_USLEEP=1 
  -DSQLITE_DEFAULT_JOURNAL_SIZE_LIMIT=1048576 
  -DSQLITE_THREADSAFE=1 -DNDEBUG=1 -DSQLITE_TEMP_STORE=3 
  -DSQLITE_OS_UNIX=1 
  -D_HAVE_SQLITE_CONFIG_H -DSQLITE_THREAD_OVERRIDE_LOCK=-1 
  -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_BACKWARDS -Dfdatasync=fsync 
  -DSQLITE_DEFAULT_CACHE_SIZE=256 
  -DBDBSQL_MAX_LOCKS=1000 
  -DBDBSQL_MAX_LOCK_OBJECTS=1000
  如果确定不会在多进程间共享数据库,还可以在上述LOCAL_CFLAGS中加入"-DBDBSQL_OMIT_SHARING",这样日志文件不会被写入文件系统,进一步节省了设备空间。
  编译系统镜像中的SQLite部分:
  $ cd $HOME/android/android_src
  $ . build/envsetup.sh
  $ make clean-libsqlite
  $ mmm -B external/sqlite/dist
  $ make snod
  编译好了,再来一次镜像替换:
  $ cp $HOME/android/android_src/out/target/product/gener ic/*.img 
  接上页$HOME/android/android-sdk-linux_86/platforms/andro id-2.1/images 
  使用图形界面工具删除先前的设备BDBSQL,重创建一个新的Android 2.1设备BDBSQL,并点击"start"启动。这里一定要创建新的设备,因为启动过的设备,其数据库文件已被SQLite生成,BDB SQL无法访问。
  4. 使用BDB SQL
  现在Android里所有应用程序的SQL存储引擎都已被替换为BDB SQL了。我们使用"联系人"来试用一下我们的新设备吧,在Setting里面把Locate设置为中文简体,安装一个中文输入法(比如搜狗),然后打开"联系人",随便增加一条记录: 
  
  在主机上我们可以使用adb shell来查看并操作程序所生成的数据库。请留意sqlite3 shell输出的版本信息是Berkeley DB 11gR,同时shell的提示符是dbsql>,这说明我们已经把SQLite成功替换为BDB SQL引擎:
  $ adb shell
  # cd /data/data/com.android.providers.contacts/database s/
  # sqlite3 contacts2.db
  Berkeley DB 11g Release 2, library version 11.2.5.0.21: (March 30, 2010)
  Enter ".help" for instructions
  Enter SQL statements terminated with a ";"
  dbsql> .tables
  _sync_state status_updates
  _sync_state_metadata v1_settings
  activities view_contacts
  agg_exceptions view_contacts_restricted
  android_metadata view_data
  calls view_data_restricted
  contact_entities_view view_groups
  contact_entities_view_restricted view_raw_contacts
  contacts view_raw_contacts_restricted
  data view_v1_contact_methods
  groups view_v1_extensions
  mimetypes view_v1_group_membership
  name_lookup view_v1_groups
  nickname_lookup view_v1_organizations
  packages view_v1_people
  phone_lookup view_v1_phones
  raw_contacts view_v1_photos
  settings
  dbsql> select * from contacts;
  2|逍遥李|||0|0|0|0|1|1|0nE08B4A8BFA37D4||0
  接上页
  dbsql> select * from data;
  1||4|1|0|0|0|li|li|||||||||||||||||
  2||6|2|0|0|0|66666666|1||66666666|||||||||||||||
  3||6|2|0|0|0|88888888|2||88888888|||||||||||||||
  4||8|2|0|0|0|蜀山|1|||||||||||||||||
  5||4|2|0|0|0|逍遥李|逍遥|李||||||||||||||||
  dbsql>
  5. 结束语
  关于BDB SQL库在Android平台上的编译和使用的介绍到这里就结束了。我们用两篇博文分别介绍了side-by-side(并存)和Drop-in(替换)这两种使用方式。在Drop-in模式下,现有的应用程序无修改就可以直接使用BDB SQL引擎。
  BDB SQL在开发过程中始终给予Android平台高度重视,在开发过程中投入了多位资深工程师致力于将BDB SQL移植到Android平台上,并将Android列为产品周期测试的主流平台。OARDC的工程师Zengfa.Dou和Stephen.Tang 给予了我这个初学者极大帮助。在此一并致谢!
  下载数据库软件
  http://www.oracle.com/technetwork/database/berkele ydb/downloads/index.html
分享到:
评论

相关推荐

    有限元程序资源

    14. **LibMesh**: 一个C++框架,用于在串行和平行平台上模拟偏微分方程。 - 地址:[http://libmesh.sourceforge.net/](http://libmesh.sourceforge.net/) 15. **IMPACT**: 一个开源的有限元程序,用于预测各种工程...

    别人整理的有限元源程序资源清单,希望对大家有用

    - **介绍**: LibMesh是一个C++框架,适用于串行和并行平台上的偏微分方程数值模拟。它支持多种编程模型和技术,如自适应网格细化。 15. **IMPACT** - **网站**: [http://impact.sourceforge.net/]...

    one world 源代码

    This release includes binaries for the Berkeley DB. The source distribution for the Berkeley DB is available at: http://www.sleepycat.com This release includes binaries for Markus Dahm's Byte ...

    《高等应用数学问题的MATLAB求解》配书光盘

    《高等应用数学问题的MATLAB求解》一书的配书光盘。供大家参考学习 本光盘包括如下目录: “CAI教学材料” 包含全套的PowerPoint文件,可以直接用于教学,具体请参见该目录中的readme.pps文件说明。目前包含的...

    《高等应用数学问题的MATLAB求解》配书光盘(资料)

    《高等应用数学问题的MATLAB求解》光盘资料。供大家参考学习 本光盘包括如下目录: “CAI教学材料” 包含全套的PowerPoint文件,可以直接用于教学,具体请参见该目录中的readme.pps文件说明。目前包含的为中文版...

    国外人工智能界牛人主页

    “国外人工智能界牛人主页”这一标题简明扼要地概括了本文档的主题:介绍一系列在国际上享有盛誉的人工智能专家及其所在机构的网页链接。通过访问这些网页,读者可以获取到与人工智能相关的最新研究成果、教学资料...

    高等应用数学问题的MATLAB求解光盘 part2

    高等应用数学问题的MATLAB求解随书光盘 光盘分为两部分上传,第一部分是CAI教学资源 第一部分的资源名为:高等应用数学问题的MATLAB求解光盘 part1:包含书中CAI教学材料 光盘使用说明 本光盘是薛定宇和陈阳泉所著...

    高等应用数学问题的MATLAB求解光盘 part1

    第二部分的资源名为:高等应用数学问题的MATLAB求解光盘 part2:包含书中开发函数,使用资源及例题全部代码 光盘使用说明 本光盘是薛定宇和陈阳泉所著《高等应用数学问题的MATLAB求解》一书的配书光盘。本光盘的...

    代码检测工具比较

    - **主页网址**:[http://www.coverity.com/index.html](http://www.coverity.com/index.html) 3. **@stake SmartRisk Analyzer** - **静态扫描语言**:支持C/C++和Java。 - **开源/付费**:付费。 - **厂商**...

    python 有用资料

    - **BerkeleyDB**:Python接口用于访问BerkeleyDB数据库,提供高性能和事务安全的键值存储。 ### Python项目管理与构建 - **PEAK**:提供了一系列项目管理和构建工具,简化了Python项目的生命周期管理。 - **SCons...

    学习搜索的最好网站

    - **基本策略**: [http://www.lib.berkeley.edu/Teacernet/Strategies.html](http://www.lib.berkeley.edu/Teacernet/Strategies.html) 加州伯克利分校图书馆提供的搜索教程以其详尽的指导和学术化的特性而闻名。它...

    计算机视觉与模式识别有用的代码网站

    【计算机视觉与模式识别】是两个紧密相关的领域,它们在人工智能和图像处理中扮演着重要角色。计算机视觉致力于让机器“看”并理解图像,而模式识别则涉及从数据中发现规律并分类。以下是一些从给定内容中提取的关键...

    Ubuntu配置DNS服务器--bind.pdf

    - **配置文件示例**:[http://www.bind.com/bind.html](http://www.bind.com/bind.html) - **常见问题解答**:[http://www.nominum.com/getOpenSourceResource.php?id=6]...

    java berkeley-db demo

    Berkeley DB Berkeley DB(BDB)是一个高效的嵌入式数据库编程库,C语言、C++、Java、Perl、Python、Tcl以及其他很多语言都有其...http://www.oracle.com/technetwork/cn/database/berkeleydb/index-085507-zhs.html

    资源网站目录

    - **网址**: http://www.abab123.com/Soft/Index.html - **资源简介**: 内容广泛且中文界面友好,适合寻求中文学习资源的用户。 #### 诺贝尔学术资源网 - **网址**: http://bbs.ok6ok.com/index.php - **资源简介**...

    BerkerleyDb-18.1.40.tar.gz

    5. **跨平台兼容**:BerkeleyDB可运行在多种操作系统上,包括Linux和Mac OS X,适应性强。 6. **API丰富**:提供了C、C++、Java、Python等语言的API,方便开发者集成到各种项目中。 二、BerkeleyDB 18.1.40的安装...

Global site tag (gtag.js) - Google Analytics