The NoteBook of EricKong

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

#

Dijit 的类文件

Dijit 的类也是一个 Dojo 类,所以 Dijit 类的声明和定义也是用 dojo.declare 函数,如清单 10 和清单 13 所示。Dijit 类既然是 Dojo 类,自然也可以继承其它类或被其它类所继承。实际上,一个 Dijit 类区别于其它 Dojo 类最重要的一点是,Dijit 类都直接或间接地继承于类 dijit._Widget,大部分的 Dijit 类通过 mixin 的方式继承类 dijit._Templated,如清单 13 中的 [dijit._Widget,dijit._Templated]。

让我们回过头来看看清单 13,清单 13 中,有一个属性叫 templatePath,从名字就可以看出来,这个属性指定了 template 文件的路径。除了指定 template 文件的路径外,也可以直接把 template 变成一个字符串放到类定义文件中,这种情况下,要用到的属性就是 templateString 了。

除了 templatePath 和 templateString 以外,还有很多扩展点可以根据实际需要重载,这些扩展点覆盖了 dijit 的整个生命周期,具体列举如下:

constructor:

constructor 会在设置参数之前被调用,可以在这里进行一些初始化的工作。Constructor 结束后,便会开始设置 Dijit 实例的属性值,即把 dijit 标签中定义的属性值赋给 dijit 实例。

postMixInProperties:

如果你在你的 dijit 中重载这个函数,它会在 dijit 展现之前,并且在 dom 节点生成之前被调用。如果你需要在 dijit 展现之前,修改实例的属性,可以在这里实现。

buildRendering:

通常情况下这个函数你不需要去重载,因为 _Templated 为在这里为你做好所有的事情,包括 dom 节点的创建,事情的连接,attach point 的设置。除非你要开发一套完全不一样的模板系统,否则建议你不要重载这个函数。

postCreate:

这个函数会在 dijit 创建之后,子 dijit 创建之前被调用。

startup:

当你需要确保所有的子 dijit 都被创建出来了,你可以调用这个函数。

destroy:

会在 dijit 被销毁时被调用,你可以在这里进行一些资源回收的工作

posted @ 2014-12-05 17:06 Eric_jiang 阅读(165) | 评论 (0)编辑 收藏

1、mvn archetype:create -DgroupId=org.david.app -DartifactId=mywebapp -DarchetypeArtifactId=maven-archetype-webapp
2、cd mywebapp
     mvn eclipse:eclipse
     导入eclipse工程
     (或者直接从eclipse中导入maven工程)
3、添加servlet依赖
        <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
    </dependency>
4、添加源代码目录src/main/java
     将源代码放在该目录下。
5、添加jetty插件
<build>
   <finalName>mywebapp</finalName>
   <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <source>1.5</source>
            <target>1.5</target>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.mortbay.jetty</groupId>
          <artifactId>maven-jetty-plugin</artifactId>
        </plugin>        
   </plugins>
</build>
6、用jetty调试(http://www.blogjava.net/alwayscy/archive/2007/06/01/118584.html)
命令行:mvn jetty:run
或者
1、先来配置一个外部工具,来运行JETTY:
选择菜单Run->External Tools->External Tools ...在左边选择Program,再点New:
配置Location为mvn完整命令行。定位到bin下的mvn.bat
选择Working Directory为本项目。
Arguments填写:jetty:run
再点选Enviroment页:加入MAVEN_OPTS变量,值为:
-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8080,server=y,suspend=y
其中,如果suspend=n 表示不调试,直接运行。address=8080为端口
然后,点APPLY,再关闭本对话框。
另外注意一点,好像external tool菜单项在java browering的perspective下才会出现。如果在java下看不见,可以切换下试试。
启动jetty
2、调试应用
点选run->debug...
选中左树中的Remote Java Application,再点New。
选择你的项目,关键是要填和之前设置外部工具时相同的端口号。
posted @ 2014-12-02 16:37 Eric_jiang 阅读(165) | 评论 (0)编辑 收藏

1.震动

先说简单的,震动提示

第一步,在AndroidManifest.xml 里声明权限

 <uses-permissionandroid:name="android.permission.VIBRATE"/>

第二步,获得震动服务并启动

 Vibrator vibrator = (Vibrator)activity.getSystemService(Context.VIBRATOR_SERVICE);

vibrator.vibrate(newlong[]{300,500},0);

经过以上两步,就启动震动了。上述代码直接在程序中调用就可以了,这个是比较简单的,比大象放冰箱要少一步。Vibrate()的参数网上能查到,看看就知道了。

2.提示铃声

第一步,1.准备一个音频文件比如:beep.ogg。先把音频文件导入到res/raw文件夹下,需要注意的是这个文件下的文件名必须是小写,之后导入即可。

第二步,为activity注册的默认音频通道。这个一般在onCreate()函数中注册即可。

 activity.setVolumeControlStream(AudioManager.STREAM_MUSIC);

第三步,检查当前情景模式,确定不要是静音。

第四步,初始化MediaPlayer对象,指定播放的声音通道为 STREAM_MUSIC,这和上面的步骤一致,指向了同一个通道。

 MediaPlayer mediaPlayer = new MediaPlayer();//这个我定义了一个成员函数

 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

第五步,注册事件。当播放完毕一次后,重新指向流文件的开头,以准备下次播放。

 mediaPlayer .setOnCompletionListener(newMediaPlayer.OnCompletionListener() {

        @Override

public voidonCompletion(MediaPlayer player) {

        player.seekTo(0);

        }

 });

第六步,设定数据源,并准备播放

AssetFileDescriptor file =activity.getResources().openRawResourceFd(

 R.raw.beep);

 try{

 mediaPlayer.setDataSource(file.getFileDescriptor(),

 file.getStartOffset(), file.getLength());

 file.close();

 mediaPlayer.setVolume(BEEP_VOLUME,BEEP_VOLUME);

 mediaPlayer.prepare();

 }catch (IOException ioe) {

 Log.w(TAG, ioe);

 mediaPlayer = null;

 }

第七步,开始播放

mediaPlayer.start();

 

经过以上几步,就可以实现手机的铃声了。

posted @ 2014-11-25 13:38 Eric_jiang 阅读(1287) | 评论 (0)编辑 收藏

    1.显示调用方法
  • Intent intent=new Intent(this,OtherActivity.class);  //方法1
  • Intent intent2=new Intent();
  • intent2.setClass(this, OtherActivity.class);//方法2
  • intent2.setClassName(this, "com.zy.MutiActivity.OtherActivity");  //方法3 此方式可用于打开其它的应用
  • intent2.setComponent(new ComponentName(this, OtherActivity.class));  //方法4
  • startActivity(intent2);
 
2.隐式调用方法(只要action、category、data和要跳转到的Activity在AndroidManifest.xml中设置的匹配就OK
 
3.跳转到另一个Activity后,当返回时能返回数据
  • 在跳转的Activity端,调用startActivityForResult(intent2, 1),跳转到下一个Activity,其中第一个参数为传入的意图对象,第二个为设置的请求码;
  • 跳转到第二个Activity后,调用setResult(100, intent)方法可返回上一个Activity,其中第一个参数为结果码,第二个为传入的意图对象;
  • 在第一个Activity通过onActivityResult()方法获得返回的数据。
posted @ 2014-11-25 13:20 Eric_jiang 阅读(190) | 评论 (0)编辑 收藏

PS:有的人安装过程中遇到这个问题this computer meets the reauirements for HAXM,but....

这个问题应该是CPU可能默认没有开Vt,所以得去bios开了再说。进了bios找到virtual technology选项,选择enable即可。


android模拟器一直以来是它的一大败笔,启动需要很长时间,运行起来也超慢,虽说可以通过创建模拟器时更改参数,但速度还是不理想。所以,以前开发时,一直用真机调试,可它的接口又是那么的脆弱,用不了多久,就接触不良了,这个问题一直困扰很多人。之前发现过一种方法,可以通过WIFI调试,但是需要有无线路由器,而且很多手机对这个支持不太好。前几天同事分享了一种方法(API guid里面有讲),可以让模拟器在X86架构的机器上以原生的速度运行。

方法很简单:

1.通过android sdk manager下载" Intel Hardware Accelerated Execution Manager",下载完成后,在SDK目录中找到下载文件并安装它。

2.通过android sdk manager 下载 “Intel x86 Atom System Image

3.创建Intel x86的模拟器

下面就可以使用创建的这个x86的模拟器进行调试了,速度非常,我用的MacBook装的WIN7,启动模拟器只需要几秒,运行APP速度跟我的三星I9001一样流畅,需要注意的是:

1.android sdk tools 至少要R17以上,android sdk API 至少要15

2.自己的电脑要给力,我的模拟器给它分了2G的内存,所以速度特别

不上图了,下面是文档地址:http://developer.android.com/tools/devices/emulator.html


首先打开sdk manager,确定有x86的image。如下图

4.2只有ARM的image,所以不好使,还得用4.1.2的(2013年1月31日,4.2版本已有x86的image)


然后下载一下intelHAXM

然后进到sdk\extras\intel\Hardware_Accelerated_Execution_Manager去点击exe,一路next安装一下。


为了确认是否开了,打开命令行 输入

sc query intelhaxm
然后像下面State 是running就对了。


CPU可能默认没有开Vt,所以得去bios开了再说。


然后建立AVD

cpu/abi的地方记得选x86的

然后下面的Hardware部分要new一下,搞出来GPU emulation 然后选择yes

更新了adt到21.0.1后,创建AVD的界面有些不同。如下图,在Emulation Options里要选上Use Host GPU.

然后就可以了,启动AVD

显示HAX is working。

posted @ 2014-11-24 11:46 Eric_jiang 阅读(186) | 评论 (1)编辑 收藏

用途

显示关于卷组的信息。

语法

lsvg [ -L ] [ -o ] |[ -n DescriptorPhysicalVolume ] | [ -i ] [ -l | -M | -p ] VolumeGroup ...

描述

lsvg 命令显示关于卷组的信息。如果使用 VolumeGroup 参数,只显示那个卷组的信息。如果不使用VolumeGroup 参数,显示所有已定义的卷组名列表。

当来自“设备配置”数据库的信息不可用时,某些字段将会包含一个问号()替代丢失的数据。当对命令给出一个逻辑卷标识时,lsvg 命令试图从描述区域获得尽可能多的信息。

注:要确定卷组的主数,请使用 ls -al /dev/VGName 命令。这个命令列出代表卷组的特殊设备文件。卷组主数与特殊的设备文件的主设备号相同。例如,对于名为 ha1vg 的卷组,请输入如下命令:

ls -al /dev/ha1vg

该命令返回以下内容:

crw-rw---- 1 root system 52, 0 Aug 27 19:57 /dev/ha1vg

在本示例中,卷组主数是 52

您可以使用基于 Web 的系统管理器(wsm)中的卷应用程序来更改卷组特性。您也可以使用“系统管理接口工具”(SMIT)smit lsvg 快速路径来运行此命令。

标志

-L指定不等待获取卷组锁。

注:如果要更改卷组,那么使用 -L 标志会带来不可靠的日期。
-p对于用 VolumeGroup 参数指定的组内的每个物理卷列出以下信息:
Physical volume
组内的一个物理卷。
PVstate
物理卷的状态。
Total PPs
物理卷上的物理分区总数。
Free PPs
物理卷上的空闲物理分区数。
Distribution
物理卷的每节中分配的物理分区数:物理卷的外边、外中、正中、内中和内边。
-l列出由 VolumeGroup 参数指定的组内的每个逻辑卷的以下信息:
LV
卷组内的一个逻辑卷。
Type
逻辑卷类型。
LPs
逻辑卷中的逻辑分区数。
PPs
逻辑卷使用的物理分区数。
PVs
逻辑卷使用的物理卷数。
Logical volume state
逻辑卷的状态。Opened/stale 表示逻辑卷是打开的但包含的分区不是当前的。Opened/syncd 表示逻辑卷是打开和同步的。Closed 表示逻辑卷还没有打开。
Mount point
逻辑卷的文件系统安装点(如果适用)。
-i从标准输入中读取卷组名。
-M列出物理卷上的每个逻辑卷的以下字段:

PVname:PPnum [LVname: LPnum [:Copynum] [PPstate]]
PVname
系统指定的物理卷名。
PPnum
物理分区号。物理分区号范围为 1 到 1016。
LVname
分配的物理卷的逻辑卷名。逻辑卷名必须是系统范围内唯一的名称,它可以是 1 到 64 个字符。
LPnum
逻辑分区号。逻辑分区号的范围为 1 到 64000。
Copynum
镜像号。
PPstate
只有在非当前物理卷上的物理分区才显示为旧文件。
-n DescriptorPhysicalVolume由 DescriptorPhysicalVolume 变量指定描述符区域的访问信息。由于使用 -n 标志访问的信息没有对该逻辑卷进行验证,故这些信息可能不是当前信息。如果不使用 -n 标志,那么物理卷的描述符区域保留着最有效的访问信息,因此显示的信息是当前的。当使用这个标志时,卷组不一定是活动的。
-o仅列出活动的卷组(那些变化的卷组)。一个活动的卷组是可以使用的卷组。

如果不指定任何标志,则显示以下信息:

Volume group卷组名。卷组名在系统范围内必须是唯一的并且可以是 1 到 15 个字符。
Volume group state卷组状态。如果使用 varyonvg 命令激活了卷组,那么卷组状态是active/complete(表明所有物理卷是活动的)或 active/partial(表明某些物理卷不是活动的)。如果没有用 varyonvg 命令激活卷组,那么卷组状态是 inactive
Permission访问许可权:只读读写
Max LVs卷组中允许的逻辑卷的最大数目。
LVs当前在卷组中的逻辑卷数。
Open LVs当前打开的卷组内的逻辑卷数。
Total PVs卷组内的物理卷的总数。
Active PVs当前活动的物理卷数。
VG identifier卷组标识。
PP size每个物理分区的大小。
Total PPs卷组内的物理分区的总数。
Free PP没有分配的物理分区数。
Alloc PPs当前分配到逻辑卷的物理分区数。
Quorum多数需要的物理卷数。
VGDS卷组内的卷组描述符区域数。
Auto-on在 IPL 上自动激活(yes 或 no)。
Concurrent表明卷组状态是“可并发的”或“不可并发的”。
Auto-Concurrent“当前可用”卷组状态是否在并发和非并发方式间自动改变的状态。对于“不可并发的”卷组,缺省值为 Disabled。
VG Mode卷组方式变化:“并发”或“非并发”。
Node ID如果卷组在并发节点变化的当前节点的节点标识。
Active Nodes使卷组变化的其它并发卷组节点的节点标识。
Max PPs Per PV卷组允许的每个物理卷的物理分区的最大数目。
Max PVs卷组允许的物理卷的最大数目。
LTG size卷组的逻辑磁道组大小(千字节数)。
BB POLICY卷组的坏块重定位策略。
SNAPSHOT VG如果快照卷组是活动的,则为快照卷组名,否则为快照卷组标识。
PRIMARY VG如果原始卷组是活动的,则为快照卷组的原始卷组名,否则为原始卷组标识。

示例

  1. 要显示所有活动的卷组名,请输入:
    lsvg -o
  2. 要显示系统内的所有卷组名,请输入:

    lsvg
  3. 要显示关于 vg02 卷组的信息,请输入:

    lsvg vg02

    显示卷组 vg02 逻辑分区和物理分区的特性和状态。

  4. 要显示卷组 vg02 中的所有逻辑卷的名称、特性和状态,请输入:
    lsvg -l vg02

文件

/usr/sbin包含 lsvg 命令驻留的目录。

相关信息

chvg 命令、lspv 命令、lslv 命令、varyonvg 命令。

AIX 5L Version 5.2 System Management Concepts: Operating System and Devices 中的 Logical Volume Storge Overview 解释“逻辑卷管理程序”、物理卷、逻辑卷、卷组、组织、确保数据完整性和分配特性。

有关安装基于 Web 的系统管理器的信息,请参阅《AIX 5L V5.2 基于 Web 的系统管理器管理指南》中的『第 2 章:安装基于 Web 的系统管理器』。

AIX 5L Version 5.2 System Management Concepts: Operating System and Devices 中的 System Management Interface Tool(SMIT):Overview 解释结构、主菜单和 SMIT 执行的任务。

VG

  卷组 Volume Group (VG) 是计算机上的术语(操作系统的VG概念)
  一个VG是由许多物理分区组成的(可能来自多个物理卷或硬盘)。虽然这可能容易让你认为一个VG就是由几个硬盘组成的(例如/dev/hda和/dev/sda),但是更确切的说,它包含由这些硬盘提供的许多PE(物理分区 Physical Extents)。
  卷组 = VG (Volume Group)
  IBM将一组物理卷的集合称为卷组
  卷组的操作:
  磁盘空间通常在一个卷组内分配
  AIX中的所有可用磁盘 - 当作一个组来使用
  可以export用于与其它的AIX系统连接 - 高可用性的HACMP
  系统的第一个VG 称为rootvg
posted @ 2014-11-21 14:30 Eric_jiang 阅读(588) | 评论 (1)编辑 收藏

MongoDB使用手册

一、安装包下载地址

     http://www.mongodb.org/downloads

二、服务器端使用

LINUX版本:

①用tar -zxvf mongodb-linux-x86_64-1.2.4.tgz解压开安装包

mkdir -p /data/db  创建目录

cd /data/db 进入db目录下   然后创建mkdir m_data m_log

④进入mongodb解压目录的bin目录下,用

./mongod -fork --dbpath=./data/db/m_data/ --logpath=./m_log.log  --logappend --port=27017 &  启动服务器。

WINDOW版本:

执行如下命令启动服务器:

mongod --bind_ip 127.0.0.1 --logpath d:\data\logs --logappend --dbpath d:\data\db  --directoryperdb –install

【注:将mongodb安装成服务,装该服务绑定到IP127.0.0.1,日志文件为d:\data\logs,以及添加方式记录。数据目录为d:\data\db。并且每个数据库将储存在一个单独的目录(--directoryperdb)】

三、客户端使用:

LINUX版本:

进入MongoDBbin目录下,使用./mongo进入命令行行下 然后即可进行增删改查等日常操作。

WINDOW版本:

进入mongodbbin目录下,使用mongo.exe --host IP  --port 端口连接到MongoDB服务器上

四、MongDB停止

LINUX版本:

      如果在shell窗口下可以直接按“CTRL+C”,如果是作为后台服务使用时,可以先使用  ps -ef |grep mongod查询出服务器的pid,然后使用kill -9 pid    此处的Pid为查询出的pid

WINDOW版本:

       如果在命令窗口下直接按“CTRL+C”,如果是作为系统服务来使用的话,需要到服务管理中停止服务或者在window管理器中终止进程。

五、web版本的统计服务状态

    使用http://IP(服务器IP:端口即可

六、语法

1、基本操作

db.AddUser(username,password) 添加用户

db.auth(usrename,password) 设置数据库连接验证

db.cloneDataBase(fromhost) 从目标服务器克隆一个数据库

db.commandHelp(name) returns the help for the command

db.copyDatabase(fromdb,todb,fromhost) 复制数据库fromdb---源数据库名称,todb---目标数据库名称,fromhost---源数据库服务器地址

db.createCollection(name,{size:3333,capped:333,max:88888}) 创建一个数据集,相当于一个表

db.currentOp() 取消当前库的当前操作

db.dropDataBase() 删除当前数据库

db.eval(func,args) run code server-side

db.getCollection(cname) 取得一个数据集合,同用法:db['cname'] or

db.getCollenctionNames() 取得所有数据集合的名称列表

db.getLastError() 返回最后一个错误的提示消息

db.getLastErrorObj() 返回最后一个错误的对象

db.getMongo() 取得当前服务器的连接对象get the server

db.getMondo().setSlaveOk() allow this connection to read from then nonmaster membr of a replica pair

db.getName() 返回当操作数据库的名称

db.getPrevError() 返回上一个错误对象

db.getProfilingLevel()

db.getReplicationInfo() 获得重复的数据

db.getSisterDB(name) get the db at the same server as this onew

db.killOp() 停止(杀死)在当前库的当前操作

db.printCollectionStats() 返回当前库的数据集状态

db.printReplicationInfo()

db.printSlaveReplicationInfo()

db.printShardingStatus() 返回当前数据库是否为共享数据库

db.removeUser(username) 删除用户

db.repairDatabase() 修复当前数据库

db.resetError()

db.runCommand(cmdObj) run a database command. if cmdObj is a string, turns it into {cmdObj:1}

db.setProfilingLevel(level) 0=off,1=slow,2=all

db.shutdownServer() 关闭当前服务程序

db.version() 返回当前程序的版本信息

2、数据集()操作

db.test.find({id:10}) 返回test数据集ID=10的数据集

db.test.find({id:10}).count() 返回test数据集ID=10的数据总数

db.test.find({id:10}).limit(2) 返回test数据集ID=10的数据集从第二条开始的数据集

db.test.find({id:10}).skip(8) 返回test数据集ID=10的数据集从0到第八条的数据集

db.test.find({id:10}).limit(2).skip(8) 返回test数据集ID=1=的数据集从第二条到第八条的数据

db.test.find({id:10}).sort() 返回test数据集ID=10的排序数据集

db.test.findOne([query]) 返回符合条件的一条数据

db.test.getDB() 返回此数据集所属的数据库名称

db.test.getIndexes() 返回些数据集的索引信息

db.test.group({key:...,initial:...,reduce:...[,cond:...]})

db.test.mapReduce(mayFunction,reduceFunction,<optional params>)

db.test.remove(query) 在数据集中删除一条数据

db.test.renameCollection(newName) 重命名些数据集名称

db.test.save(obj) 往数据集中插入一条数据

db.test.stats() 返回此数据集的状态

db.test.storageSize() 返回此数据集的存储大小

db.test.totalIndexSize() 返回此数据集的索引文件大小

db.test.totalSize() 返回些数据集的总大小

db.test.update(query,object[,upsert_bool]) 在此数据集中更新一条数据

db.test.validate() 验证此数据集

db.test.getShardVersion() 返回数据集共享版本号

3、MongoDB语法与现有关系型数据库SQL语法比较

MongoDB语法 MySql语法

db.test.find({'name':'foobar'}) <==> select * from test where name='foobar'

db.test.find() <==> select * from test

db.test.find({'ID':10}).count() <==> select count(*) from test where ID=10

db.test.find().skip(10).limit(20) <==> select * from test limit 10,20

db.test.find({'ID':{$in:[25,35,45]}}) <==> select * from test where ID in (25,35,45)

db.test.find().sort({'ID':-1}) <==> select * from test order by ID desc

db.test.distinct('name',{'ID':{$lt:20}}) <==> select distinct(name) from test where ID<20

db.test.group({key:{'name':true},cond:{'name':'foo'},reduce:function(obj,prev){prev.msum+=obj.marks;},initial:{msum:0}}) <==> select name,sum(marks) from test group by name

db.test.find('this.ID<20',{name:1}) <==> select name from test where ID<20

db.test.insert({'name':'foobar','age':25})<==>insert into test ('name','age') values('foobar',25)

db.test.remove({}) <==> delete * from test

db.test.remove({'age':20}) <==> delete test where age=20

db.test.remove({'age':{$lt:20}}) <==> elete test where age<20

db.test.remove({'age':{$lte:20}}) <==> delete test where age<=20

db.test.remove({'age':{$gt:20}}) <==> delete test where age>20

db.test.remove({'age':{$gte:20}}) <==> delete test where age>=20

db.test.remove({'age':{$ne:20}}) <==> delete test where age!=20

db.test.update({'name':'foobar'},{$set:{'age':36}}) <==> update test set age=36 where name='foobar'

db.test.update({'name':'foobar'},{$inc:{'age':3}}) <==> update test set age=age+3 where

name='foobar'

 

4、 

 

七、MongoDB主从复制介绍

MongoDB的主从复制其实很简单,就是在运行 主的服务器 上开启mongod进程 时,加入参数--master即可,在运行从的服务 器上开启mongod进程时,加入--slave --source 指定主即可,这样,在主数据 库更新时,数据被复制到从数据库



(这里日志 文件 和访问 数据时授权用户暂时不考虑 )

下面我在单台服务器上开启2 deamon来模拟2台服务器进行主从复制:

$ mkdir m_master m_slave

$mongodb/bin/mongod  --port  28018 --dbpath ~/m_master  --master  &

$mongodb/bin/mongod  --port  28019 --dbpath ~/m_slave  --slave  --source   localhost:28018  &

这样主从服务器都已经启动了,可以利用 netstat -an -t 查看2801828019端口 是否开放

登录主服务器:

$ mongodb/bin/mongo --port 28018

MongoDB shell version: 1.2.4-

url: test

connecting to: 127.0.0.1:28018/test

type "help" for help

> show dbs

admin

local

test

> use test

switched to db test

> show collections

这里主上的test数据什么表都没有,为空,查看从服 务器同样也是这样

$ mongodb/bin/mongo --port 28019

MongoDB shell version: 1.2.4-

url: test

connecting to: 127.0.0.1:28019/test

type "help" for help

> show dbs

admin

local

test

> use test

switched to db test

> show collections

那么现在我们来验证主从数据是否会像想象的那样同步 呢?

我们在主上新建表user

> db  

test

>db.createCollection("user");

> show collections           

system.indexes

user

user已经存在了,而且test库中还多了一个system.indexes用来存放索引的表



到从服务器上查看test库:

> db  

test

> show collections           

system.indexes

User

> db.user.find();

服务器的test库中user表已经存在,同时我还查了一下user表为空

现在我们再来测试一下,向主服务器test库的user表中插入一条数据

> show collections           

system.indexes

user

> db.user.insert({uid:1,name:"Falcon.C",age:25});

> db.user.find();                               

{ "_id" : ObjectId("4b8226a997521a578b7aea38"), "uid" : 1, "name" : "Falcon.C", "age" : 25 }

时我们查看从服务器的testuser表时会多出一条记录来:

> db.user.find();

{ "_id" : ObjectId("4b8226a997521a578b7aea38"), "uid" : 1, "name" : "Falcon.C", "age" : 25 }

MongoDB 还有 Replica Pairs Master - Master

参考地址:http://www.mongodb.org/display/DOCS/Master+Slave



MongoDB一般情况下都可以支持主主复制,但是在大部分情况下官方不推荐使用

运行 master - master的准备工作是:

新建存放数据 库文件 的路径

$mkdir mongodata/mm_28050 mongodata/mm_28051

运行mongodb数据库 ,一个端口 为:28050,一个为:28051

$ mongodb/bin/mongod --port 28050 --dbpath ~/mongodata/mm_28050 --master --slave --source localhost:28051 > /dev/null &

$ mongodb/bin/mongod --port 28051 --dbpath ~mongodata/mm_28051 --master --slave --source localhost:28050 > /dev/null &

可以通过ps -ef|grep mongod netstat -an -t来检查是否运行功能



测试master - master模式

$ mongodb/bin/mongo --port 28050

MongoDB shell version: 1.2.4-

url: test

connecting to: 127.0.0.1:28050/test

type "help" for help

> show dbs

admin

local

> db

test

> db.user.insert({_id:1,username:"Falcon.C",age:25,sex:"M"});

> db.user.find();

{ "_id" : 1, "username" : "Falcon.C", "age" : 25, "sex" : "M" }

> db.user.find();  //28051端口插入数据后,再来查询,看数据是否同步

{ "_id" : 1, "username" : "Falcon.C", "age" : 25, "sex" : "M" }

{ "_id" : 2, "username" : "NetOne", "age" : 24, "sex" : "F" }

$ mongodb/bin/mongo --port 28051

MongoDB shell version: 1.2.4-

url: test

connecting to: 127.0.0.1:28051/test

type "help" for help

> db

test

> show collections         端口28050已经新建了一个user表并插入了一条数据,这里多出2

system.indexes

user

> db.user.find();        //查询表user发现数据已经同步

{ "_id" : 1, "username" : "Falcon.C", "age" : 25, "sex" : "M" }

> db.user.insert({_id:2,username:"NetOne",age:24,sex:"F"});在此插入数据看数据是否双向同步

> db.user.find();  

{ "_id" : 1, "username" : "Falcon.C", "age" : 25, "sex" : "M" }

{ "_id" : 2, "username" : "NetOne", "age" : 24, "sex" : "F" }

过以上开启两终端分别连接到2805028051端口,分别插入测试数据发现,一切正常,正如我们所想的那样实现数据的双向同步

 

八、 

posted @ 2014-11-19 18:28 Eric_jiang 阅读(159) | 评论 (0)编辑 收藏

MongoDB创建数据库完全可以使用use

如下:

use mydb;

这样就创建了一个数据库。

这一步很重要如果什么都不操作离开的话 这个库就会被系统删除。

 

验证-------------------------------

然后使用插入语句:

db.user.insert({name:'tompig'});

在使用下列命令查看

show collections;      ---查看‘表’ 

show dbs                   ---查看库

如图操作:

 

mongodb 删除数据库

use mydb; 

 db.dropDatabase();

 

mongodb删除表 

db.mytable.drop();

posted @ 2014-11-19 12:58 Eric_jiang 阅读(130) | 评论 (0)编辑 收藏

     摘要: 最后就是下面2个(这两个版本不对就容易出现各种各样的,杂七杂八的问题) 这里我就给出我所采用的版本spring-data-documentspring-data-commons有所改变所有版本必须要对应好下面是jar下载地址 http://www.springsource.org/spring-data/mongodb http://www.springsource.org/s...  阅读全文
posted @ 2014-11-18 19:52 Eric_jiang 阅读(283) | 评论 (0)编辑 收藏

db2数据库还原命令
 
1.备份的数据库(olddb) 与要还原的数据(newdb)名不相同: 
db2 restore db olddb into newdb; 
  www.2cto.com  
2.当前目录下存在多个备份文件.需要指定时间 
db2 restore db olddb taken at 20120819175932 into newdb; 
 
3.需要指定备份文件的目录 
db2 RESTORE DATABASE olddb FROM "/media/olddb.0.db2inst1.NODE0000.CATN0000.20120819175932.001" 
TAKEN AT 20120819175932  INTO newdb; 
 
4.需要指定newdb NEWLOGPATH路径 
db2 RESTORE DATABASE olddb FROM "/media/olddb.0.db2inst1.NODE0000.CATN0000.20120819175932.001" 
TAKEN AT 20120819175932 NEWLOGPATH "/opt/log" WITH 2 BUFFERS BUFFER 1024 INTO newdb; 
 
5.需要指定表空间的 
1).创建文件夹 
mkdir /home/db2inst1/db2space/newdb_sp0; 
mkdir /home/db2inst1/db2space/newdb_sp1; 
mkdir /home/db2inst1/db2space/newdb_sp2; 
mkdir /home/db2inst1/db2space/newdb_sp3; 
mkdir /home/db2inst1/db2space/newdb_sp4; 
mkdir /home/db2inst1/db2space/newdb_sp5; 
mkdir /home/db2inst1/db2space/newdb_sp6; 
 
2).还原命令加入 redirect without rolling forward 
db2 RESTORE DATABASE olddb FROM "/media/olddb.0.db2inst1.NODE0000.CATN0000.20120819175932.001" 
TAKEN AT 20120819175932 NEWLOGPATH "/opt/log" WITH 2 BUFFERS BUFFER 1024 INTO newdb 
redirect without rolling forward; 
 
3).设置表空间目录 
SET TABLESPACE CONTAINERS FOR 0 IGNORE ROLLFORWARD CONTAINER OPERATIONS USING (PATH "/home/db2inst1/db2space/newdb_sp0"); 
SET TABLESPACE CONTAINERS FOR 1 IGNORE ROLLFORWARD CONTAINER OPERATIONS USING (PATH "/home/db2inst1/db2space/newdb_sp1"); 
SET TABLESPACE CONTAINERS FOR 2 IGNORE ROLLFORWARD CONTAINER OPERATIONS USING (PATH "/home/db2inst1/db2space/newdb_sp2"); 
SET TABLESPACE CONTAINERS FOR 3 IGNORE ROLLFORWARD CONTAINER OPERATIONS USING (PATH "/home/db2inst1/db2space/newdb_sp3"); 
SET TABLESPACE CONTAINERS FOR 4 IGNORE ROLLFORWARD CONTAINER OPERATIONS USING (PATH "/home/db2inst1/db2space/newdb_sp4"); 
SET TABLESPACE CONTAINERS FOR 5 IGNORE ROLLFORWARD CONTAINER OPERATIONS USING (PATH "/home/db2inst1/db2space/newdb_sp5"); 
SET TABLESPACE CONTAINERS FOR 6 IGNORE ROLLFORWARD CONTAINER OPERATIONS USING (PATH "/home/db2inst1/db2space/newdb_sp6"); 
 
3).还原继续.注意为olddb 
RESTORE DATABASE olddb CONTINUE; 
 
6.数据库还原退回 
db2 restore db 注意为olddb abort 
 
7.还原后如果NEWLOGPATH 需要变更的 
db2 UPDATE DB CFG FOR newdb USING NEWLOGPATH /db2/db2inst1/db2logpath 
db2 UPDATE DB CFG FOR newdb  USING LOGFILSIZ 10001 
db2 force applications all; 
db2stop; 
db2start; 
posted @ 2014-11-18 12:17 Eric_jiang 阅读(380) | 评论 (0)编辑 收藏

仅列出标题
共57页: First 上一页 5 6 7 8 9 10 11 12 13 下一页 Last