Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÉîÈëdz³ö NoSQL Êý¾Ý¿â Cloudant
 
×÷ÕߣºÑîÏèÓî À´Ô´£ºdeveloperWorks ·¢²¼ÓÚ 2016-8-16
  6112  次浏览      27
 

Cloudant ¼ò½é

IBM Cloudant ÊÇÒ»ÖÖ»ùÓÚ json document ÀàÐ͵ķǹØÏµÐÍ£¨NoSQL£©Êý¾Ý¿â£¬Æä¾ßÓÐÔÚÔÆ¶Ë¸ßЧ´¦Àí¸ß¸ºÔØ¡¢¸ß²¢·¢¶ÁдµÄÇ¿´óÌØÐÔ¡£´ÓÁíÒ»¸ö½Ç¶ÈÀ´Ëµ£¬Cloudant »¹ÊÇÒ»¸ö¿ªÔ´µÄ¡¢·Ö²¼Ê½µÄÊý¾Ý¿â£¬Ëü»ùÓÚ Apache µÄ Couch DB ÏîÄ¿ÒÔ¼°¿ªÔ´µÄ BigCouch ÏîÄ¿¡£±ÈÈ罫ÆäÓ¦ÓÃÓÚÒ»¸ö´óÐ͵ÄÊý¾ÝÁ¿¿ìËÙÔö³¤µÄ web »ò mobile ÏîĿ֮ÖУ¬ÎÞÒɽ«ÊÇÒ»¸ö·Ç³£Ã÷ÖǵÄÑ¡Ôñ¡£

Òò´Ë£¬´ÓÒµÎñ³¡¾°µÄ½Ç¶ÈÀ´¿´£¬ÎÒÃDz»ÄÑ·¢ÏÖ£¬ÔÚ¾ßÓдó¹æÄ£Êý¾Ý´¦Àí¡¢´ó¹æÄ£ÊµÊ±¶¯Ì¬Êý¾Ý´¦Àí¡¢ÒÔ¼°¸ß²¢·¢ÐÔ·ÃÎʵÄÓ¦Óó¡¾°ÖУ¬Cloudant Êý¾Ý¿â½«»áÊÇÕû¸öÏîÄ¿¼Ü¹¹µÄÇ¿´óºó¶Ü¡£±ÈÈçÎÒÃÇ¿ÉÒÔ½« Cloudant ÓÃÓÚ´ó¹æÄ£¶¯Ì¬ÊµÊ±Êý¾ÝµÄ³µÁªÍøÏîÄ¿£¬Ò²¿ÉÒÔ½« Cloudant ÓÃÓÚ»ùÓÚ´ó¹æÄ£Êý¾ÝµÄÎı¾·ÖÎöÏîÄ¿ÖС£Cloudant ÒÔÆäÇ¿´óµÄÌØÐÔÔÚµ±½ñ·Ç³£Á÷ÐеĴóÊý¾ÝÔÆÆ½Ì¨ÏîÄ¿ÖÐÕ¼¾ÝמÙ×ãÇáÖØµÄλÖá£

Õë¶Ô»ùÓÚ Cloudant µÄ Java ¿ª·¢£¬Ä¿Ç°´æÔÚ×ŶàÌ× Java library ¹©Óû§Ê¹Ó㬱ÈÈç Java-Cloudant¡¢ektorp µÈµÈ¡£µ«¸ù¾Ý Cloudant µÄ¹Ù·½Îĵµ£¬Java-Cloudant ÊÇ Cloudant ¹Ù·½ÍƼöµÄ Java library¡£Òò´Ë£¬ÎÒÃǺóÃæµÄËùÓÐÓÐ¹Ø Java ʾÀýÏê½âµÄ²¿·Ö£¬¶¼½«²ÉÓà Java-Cloudant ×÷ΪÎÒÃÇµÄ Java library¡£µ±È»£¬³ýÁË Java-Cloudant Ö®Í⣬ÎÒÃÇ»¹ÐèÒª¼ÓÈëÆäËü¼¸¸ö±ØÐëµÄÒÀÀµ°ü£¬²Å¿ÉÒÔ½øÐлùÓÚ Java µÄ Cloudant ¿ª·¢¡£ÏÖ½«ËùÓÐÒÀÀµÁбíÈçÏ£º

1) Java-Cloudant

2) Commons Codec 1.6

3) Commons IO 2.4

4) Gson 2.2.4

5) OkHttp 2.5.0 (OPTIONAL)

³ý´ËÖ®Í⣬Cloudant ¹Ù·½»¹¶ÔÍâÌṩÆä RESTful API£¬¶øÇÒÁîÈËÓä¿ìµÄÊÇ Cloudant ºÍ Couch DB ÓÐ×ÅÏàͬµÄ REST API£¬Òò´ËËüÃÇÓÐ×ÅÏàͬµÄÓ÷¨¡£Ö®ºóÎÒÃÇ»á×÷³öÏêϸ½éÉÜ¡£

Cloudant Êý¾Ý¿â Java ¿ª·¢Ç°ÆÚÅäÖÃ

Ê×ÏÈ£¬ÔÚÕâÀïÎÒÃǽøÐÐ Cloudant ÕË»§×¢²á£ºhttps://Cloudant.com/sign-up/

ͼ 1. Cloudant ÕË»§×¢²á

ÎÒÃÇÖªµÀ Cloudant ±¾ÉíÊÇ document Ð굀 NoSQL Êý¾Ý¿â£¬Òò´ËÔÚ Cloudant Êý¾Ý¿âÖÐн¨ document ÊÇ×îΪ»ù±¾µÄ²Ù×÷£¬¶øÓÖÓÉÓÚ Cloudant »ùÓÚ Couch DB£¬Òò´Ë¶ÔÓÚ document µÄÄÚÈݲ»ÄÑÏëÏóºÍÆäËû document Ð͵ÄÊý¾Ý¿âÒ»Ñù£¬ÆäÊý¾ÝµÄ´æ´¢¸ñʽΪ json Êý¾Ý¸ñʽ¡£

ÏÂÃæÎÒÃÇÀ´¾ÙÀý˵Ã÷£º

Ê×ÏÈ£¬ÎÒÃÇÔÚн¨µÄ Java project ÖÐ src Ŀ¼ÏÂн¨Ò»¸ö config.properties Îļþ£¬Ö®ºóÎÒÃǽ«ÔÚÕâ¸öÎļþÀï´æ´¢ÎÒÃǶÔÓÚ Cloudant Êý¾Ý¿âµÄ·ÃÎÊȨÏÞ£º

ͼ 2. config.properties Îļþ

ÔÚÉÏͼÖУ¬url µÄǰ׺Ҳ¾ÍÊÇÓû§×¢²áʱµÄÓû§Ãû£¬µÇ¼ Cloudant ºó£¬ÎÒÃǽ¨Á¢Ò»¸öÃûΪ Cloudanttest µÄÊý¾Ý¿â, ÕâÀï×¢ÒâÒ»µã£¬ÔÚ½¨Á¢Êý¾Ý¿âÖ®ºó£¬ÎªÁ˰²È«Æð¼û£¬ÎÒÃÇÔÚÖ®ºóµÄ¿ª·¢Öв¢²»Ê¹ÓÃ×¢²áʱµÄÓû§Ãû£¬¼´Ê¹Ëü¾ßÓÐ admin ȨÏÞ¡£Òò´ËÎÒÃÇÐèÒªÐÂÉú³ÉÒ»¸öÓû§Ãû£¬²¢ÇÒÒª¶ÔÉú³ÉµÄÓû§Ãû½øÐÐ admin ÊÚȨ£¬ÈçÏ£º

ͼ 3. ÅäÖÃÊý¾Ý¿â

µã»÷ͼ 3 ÖеÄËøÐÍÅäÖð´Å¥Ö®ºó£¬ÎÒÃǾͿÉÒÔ¶ÔÊý¾Ý¿â½øÐÐÅäÖÃÁË¡£ÔÚÏÂͼ 4 ÖУ¬ÎÒÃÇ¿ÉÒÔ¿´µ½£¬ÀïÃæÓÐÁ½¸öÑ¡Ïî°´Å¥£¬Ò»¸öÊÇ Generate API Key, ÁíÒ»¸öÊÇ Grant Rights¡£ÎÒÃÇ¿ÉÒÔʹÓà Generate API Key ½øÐÐÓû§ÃûµÄϵͳÉú³É£¬Ò²¾ÍÊÇ˵µã»÷Õâ¸ö°´Å¥£¬Ö®ºó Cloudant »á×Ô¶¯¸øÎÒÃÇÉú³ÉÒ»×éÓû§Ãû¼°ÃÜÂ룬ȻºóÎÒÃÇ¿ÉÒÔµã»÷×îÉÏÃæµÄ Admin Ñ¡Ïî½øÐÐ admin ÊÚȨ¡£µ±È»£¬ÎÒÃÇÒ²¿ÉÒÔͨ¹ýÔÚ GrantRights ÖÐÊäÈëÎÒÃÇ×Ô¶¨ÒåµÄÓû§Ãû£¬²¢½øÐÐÊÚȨ£¬²Ù×÷·½·¨ÀàËÆ¡£

ÕâÀï²»ÄÑ¿´³ö£¬ÐÂÉú³É²¢ÊÚȨ¹ýµÄ account£¬¾ÍÊÇÎÒÃÇÒªÔÚ config.properties ÎļþÀïÅäÖÃµÄ access ÐÅÏ¢ÁË¡£

ͼ 4. ÐÂÓû§ÃûÉú³É²¢ÊÚȨ

½ÓÏÂÀ´ÎÒÃǽ«Éú³ÉµÄÓû§ÃûÃÜÂëÅäÖÃÔÚ config.properties ÎļþÀΪ°²È«Æð¼û£¬Ö®ºó±ÊÕß¶¼½«Ê¹Óà Cloudanttest Õâ¸ö mock up ³öÀ´µÄ account ½øÐн²½â£º

Çåµ¥ 1. config.properties ÅäÖÃÎļþÄÚÈÝ

CloudantNoSQLDB.credentials.url=https://Cloudanttest.Cloudant.com
CloudantNoSQLDB.credentials.username=atualtttdtdstopinundenos
CloudantNoSQLDB.credentials.password=passw0rd
db_name=Cloudanttest

ÓÐÁË config µÄÅäÖÃÐÅÏ¢£¬ÏÂÃæÎÒÃǽ«ÒýÈëÁ½¸ö common µÄÀࣺ

Çåµ¥ 2. ConfigProperties Àà¶ÁÈ¡ config ÐÅÏ¢

import Java.util.Properties;
public class ConfigProperties {
private static final String ENV_CONFIG_PROPERTIES = "/config.properties";
Properties properties = new Properties();
public ConfigProperties(String propertiesFile) {
try {
//load ÅäÖÃÎļþÐÅÏ¢
properties.load(ConfigProperties.class.getResourceAsStream(propertiesFile));
} catch (Exception e) {
e.printStackTrace();
}
}
public static ConfigProperties getEnvProperties(){
return new ConfigProperties(ENV_CONFIG_PROPERTIES);
}
public String getString(String key) {
try {
return (String) properties.get(key);
} catch (Exception e) {
e.printStackTrace();
return '!' + key + '!';
}
}
}

Çåµ¥ 3. ConfigurationUtil »ñÈ¡ Cloudant ·ÃÎÊȨÏÞ

public class ConfigurationUtil {
private static ConfigProperties envProperties = ConfigProperties.getEnvProperties();
private ConfigurationUtil() {
}
//»ñÈ¡»·¾³±äÁ¿£¬»ò´Ó properties ÎļþÖлñµÃÅäÖÃÐÅÏ¢
public static String getUserDefinedString(String name) {
String value = System.getenv(name);
return value != null && !value.isEmpty() ? value : envProperties.getString(name);
}
}

Õâ¸öÀàÊÇÓÃÀ´¾ö¶¨ÊÇ·ñ´Ó config ÎļþÖлñÈ¡ Cloudant µÄ·ÃÎÊȨÏÞ¡£ÒòΪºóÆÚÎÒÃÇ»á½éÉÜ»ùÓÚ Bluemix µÄ Cloudant service Ó¦Óã¬Õâ¸ö common ÀàÒ²ÊÇ»ùÓÚÕâÒ»µã¶ø´æÔڵģ¬Ô­ÒòÊÇÎÒÃDz»½ö¿ÉÒÔ´Ó config ÎļþÖлñÈ¡·ÃÎÊȨÏÞÍ⣬»¹¿ÉÒÔ´ÓÒÑ°ó¶¨ Cloudant service µÄ Bluemix app µÄ»·¾³±äÁ¿ÖлñÈ¡ Cloudant µÄ·ÃÎÊȨÏÞ¡£

ÖÁ´Ë£¬ÎÒÃÇÒѾ­ÅäÖúÃÁËÕë¶Ô Cloudant Java ¿ª·¢ËùÐèµÄËùÓÐÅäÖÃÐÅÏ¢¡£

н¨Êý¾Ý¿âÎĵµ

Ê×ÏÈÎÒÃÇн¨Ò»¸ö Java Bean£¬°üº¬ÁËÈý¸ö˽ÓÐÊôÐÔ£¬name£¬age£¬address£¬ÒÔ¼°ËüÃÇËù¶ÔÓ¦µÄ setter ºÍ getter ·½·¨£¬ÈçÏ£º

Çåµ¥ 4. н¨ Java Bean

public class TestBean {
private String name;
private int age;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}

ÕâÊÇÒ»¸ö¼òµ¥µÄ Java Bean£¬ÓÚÊÇÎÒÃÇÀûÓà Java ½«ÕâÑùÒ»¸ö Bean µÄ¶ÔÏó´æÈë Cloudant DB£º

Çåµ¥ 5. ´æ´¢ Java Bean ÖÁ Cloudant Êý¾Ý¿â

import com.Cloudant.client.api.CloudantClient;
import com.Cloudant.client.api.Database;
import com.ibm.fordme.common.config.ConfigurationUtil;
import com.ibm.fordme.common.constants.DBConstants;
public class CloudantTest{
public static void main(String[] args){
//Êý¾Ý¿âÁ¬½Ó
String url = ConfigurationUtil.getUserDefinedString(DBConstants.CLOUDANT_URL);
String username = ConfigurationUtil.getUserDefinedString(DBConstants.CLOUDANT_USERNAME);
String password = ConfigurationUtil.getUserDefinedString(DBConstants.CLOUDANT_PASSWORD);
CloudantClient client = new CloudantClient(url,username,password);
Database db = client.database(ConfigurationUtil.getUserDefinedString("db_name"), false);
//ʵÀý»¯ JavaBean
TestBean testBean = new TestBean();
testBean.setAddress("Xi'an");
testBean.setAge(26);
testBean.setName("yxy");
db.save(testBean);
}
}

ÆäÖÐ DBConstantsÀàÄÚÈÝÈçÏ£º

Çåµ¥ 6. Êý¾Ý¿âÅäÖÃ

public class DBConstants {
public static final String CLOUDANT_URL = "CloudantNoSQLDB.credentials.url";
public static final String CLOUDANT_USERNAME = "CloudantNoSQLDB.credentials.username";
public static final String CLOUDANT_PASSWORD = "CloudantNoSQLDB.credentials.password";
}

´ÓÉÏÃæµÄ´úÂë²»ÄÑ¿´³ö£¬ÔÚ´æ´¢ÐÅÏ¢µ½ Cloudant ֮ǰ£¬Ê×ÏÈÒª»ñµÃÈý¸öǰÌáÌõ¼þ£¬·Ö±ðÊÇ url£¬username£¬password¡£ÓÐÁËÕâÈý¸öÌõ¼þ£¬ÎÒÃǾͿÉÒÔͨ¹ý Java Cloudant lib ËùÌṩµÄ API À´½øÐÐÊý¾Ý¿âÁ¬½Ó£¬ÔÚÉÏÃæµÄ´úÂëÖУ¬ÎÒÃÇÌṩÁËÊý¾Ý¿âÃû£¬²¢ÇÒ¸øµÚ¶þ¸ö²ÎÊýµÄλÖø³Öµ false£¬Õâ¸ö²¼¶û²ÎÊýµÄÒâÒåÊÇ˵ÊÇ·ñÔÚÊý¾Ý¿â²»´æÔÚʱн¨ÕâÑùÒ»¸öÊý¾Ý¿â£¬Ò²¾ÍÊÇ˵Èç¹û½«Õâ¸ö²ÎÊýÉèÖÃΪ true µ±È»Ò²ÊÇ¿ÉÒԵģ¬ÒòΪÎÒÃÇÒѾ­½¨ºÃÁ˿⣬Òò´ËÎÒÔÚÕâÀォËüÉèÖÃΪ false¡£ µÃµ½Éú³ÉµÄ document ÈçÏÂͼËùʾ£º

ͼ 5. ¼òµ¥¶ÔÏóÎĵµ


ÔÚ´ËÎÒÃÇ·¢ÏÖÉú³ÉµÄ document Àï Cloudant »á×Ô¶¯µÄ°ïÎÒÃÇÉú³ÉÁíÍâÁ½¸ö×ֶΣº_id, _rev¡£

µ±È»Õâ¶¼ÊÇ document µÄΨһ±êʶ·û£¬µ«ÊÇÈç¹ûÎÒÃÇÏë×Ô¶¨Òå_id µÄÖµµÄ»°£¬Ò²ÊÇ¿ÉÒԵģ¬Ö»ÐèÒªÔÚÎÒÃÇµÄ Java Bean ÀïÔö¼Ó_id Õâ¸ö×ֶμ´¿É¡£

ͬʱ£¬Cloudant Ò²Ö§³Ö¸´ÔÓ¶ÔÏóµÄ´æ´¢£º

±ÈÈçÎÒÃÇÔÚ Test Bean µÄ»ù´¡ÉÏ£¬ÔÙ¼ÓÉÏÒ»¸ö TestBeanWrapper£¬ÈçÏÂ

Çåµ¥ 7. ¸´ÔÓ¶ÔÏó´æ´¢

public class TestBeanWrapper {
private String wrapperName;
private TestBean data;
public String getWrapperName() {
return wrapperName;
}
public void setWrapperName(String wrapperName) {
this.wrapperName = wrapperName;
}
public TestBean getData() {
return data;
}
public void setData(TestBean data) {
this.data = data;
}
}

½Ó×ÅÎÒÃǽ«Õâ¸ö Wrapper ÀàµÄ¶ÔÏó´æÈë Cloudant DB£¬»ñµÃÏÂÃæµÄЧ¹û£º

ͼ 6. ¸´ÔÓ¶ÔÏóÎĵµ

ÖÁ´Ë£¬¶ÔÓÚÈçºÎ½«ÐÅϢдÈë document ²¢´æÈë Cloudant DB£¬ÎÒÏë´ó¼ÒÓ¦¸ÃÒѾ­Çå³þÁË£¬ÏÂÃæÎÒÃǽ«½éÉÜÈçºÎÔÚ Cloudant DB ÖÐн¨Ò»¸ö View ²¢Ê¹ÓÃËü¡£

´´½¨ÊÓͼ

Ìáµ½ View£¬´ó¼Ò¿Ï¶¨»á¸Ðµ½·Ç³£ÊìϤ£¬SQL DB ÖÐ View ÊǺܳ£Óõģ¬ÎÒÃÇÖªµÀ View ±¾Éí¾ÍÊÇÐé±í£¬¶ø¶ÔÓÚ NoSQL£¬±ÈÈç Cloudant£¬View µÄÒâÒåÆäʵºÍ SQL DB ÖÐµÄ View ±È½ÏÀàËÆ¡£¶ÔÓÚ Cloudant DB µÄ View£¬Ëü¿ÉÒÔÓÐÑ¡ÔñÐԵعýÂË document£¬¿ÉÒÔ¼Ó¿ì²éÕÒËÙ¶È£¬ÔÚ½á¹û·µ»Ø¿Í»§¶Ë֮ǰ¿ÉÒÔ±»ÓÃÀ´Ô¤´¦Àí½á¹û¡£View ÊǼòµ¥µÄ Javascript º¯Êý£¬ËüÓÉÁ½²¿·Ö×é³É£¬map º¯ÊýºÍ reduce º¯Êý£¬Å׿ª»ÞɬµÄ¸ÅÄÏÂÃæÎÒÃǾÙÒ»¸öÀý×Ó£º

ÔÚ֮ǰ½¨Á¢ºÃµÄÊý¾Ý¿âÖУ¬ÎÒÃÇÊÖ¶¯½¨Á¢Ò»¸ö View£¬ÈçÏ£º

Çåµ¥ 8. ¼òµ¥ÊÓͼ¶¨Òå

function (doc) {
if(doc._id){
emit(doc._id, doc.name);
}
}

ËüµÄÒâÒåÊÇÈç¹û document ´æÔÚ_id Õâ¸ö×ֶΣ¬ÄÇô½«·¢Éä·µ»Ø document µÄ_id ÒÔ¼° name ×Ö¶Î×÷Ϊ½á¹û¡£

Çåµ¥ 9. ¸ù¾ÝÊÓͼ²éѯ

import com.Cloudant.client.api.CloudantClient;
import com.Cloudant.client.api.Database;
import com.ibm.fordme.common.config.ConfigurationUtil;
import com.ibm.fordme.common.constants.DBConstants;
import Java.util.List;
import Java.util.Map;
public class CloudantTest {
public static void main(String[] args) {
String url = ConfigurationUtil.getUserDefinedString(DBConstants.CLOUDANT_URL);
String username = ConfigurationUtil.getUserDefinedString(DBConstants.CLOUDANT_USERNAME);
String password = ConfigurationUtil.getUserDefinedString(DBConstants.CLOUDANT_PASSWORD);
CloudantClient client = new CloudantClient(url, username, password);
Database db = client.database(ConfigurationUtil.getUserDefinedString("db_name"), false);
//¸ù¾Ý View ²éѯÊý¾Ý¿â£¬²¢ÒÔ map ½ÓÊÕ²éѯ½á¹û
List<Map> list = db.View("testView/new-view").query(Map.class);
System.out.println(list);
}
}

ÔËÐÐÖ®ºóÎÒÃDZã¿ÉµÃµ½½á¹û£º

Çåµ¥ 10. ÊÓͼ²éѯ½á¹û

[{id=43966a7a3b14452fb265b838bafa13ac, key=43966a7a3b14452fb265b838bafa13ac, value=yxy}, 
{id=5e85569056144a519fe724329d6e6708, key=5e85569056144a519fe724329d6e6708, value=null},
{id=7850ba5c69624fb98f6241015545acfe, key=7850ba5c69624fb98f6241015545acfe, value=null},
{id=d96380207b1d4b5fae5265f27d004218, key=d96380207b1d4b5fae5265f27d004218, value=null}]

´ÓÉÏÃæÎÒÃÇÖªµÀ View ±¾Éí²¢²»ÄÑÀí½â£¬¶øÇÒºÜÈÝÒ׾ͿÉÒÔ¸ù¾Ý×Ô¼ºµÄÐèҪд³ö¶ÔÓ¦µÄ View ´Ó¶ø·µ»ØÏàÓ¦µÄ½á¹û¡£

н¨Ë÷Òý

³ýÁËÓà View ½øÐвéѯÍ⣬ÎÒÃÇ»¹¿ÉÒÔÓà index ½øÐвéѯ£¬²¢ÇÒÔÚ´óÊý¾Ý¹æÄ£Ï£¬index µÄ²éѯЧÂÊÒªÔ¶¸ßÓÚ View¡£ÔÚ Cloudant ÖÐ index µÄ½¨Á¢£¬Ïà¶Ô±È½Ï¼òµ¥£¬ÎÒÃÇÔÚÉÏÃæµÄ´úÂëÖÐÓÃÒ»ÐоͿÉÒÔ½¨ºÃÒ»¸ö×Ö¶ÎµÄ index£¬ÀýÈçÎÒÃǽ¨Á¢ wrapperName Õâ¸ö×Ö¶ÎµÄ index£º

Çåµ¥ 11. Java ½¨Á¢Ë÷Òý

db.createIndex("index_wrapper_name", "index_test", null,new IndexField[] { 
new IndexField("wrapperName", SortOrder.desc) });

ÄÇôÎÒÃǾͿÉÒÔͨ¹ý index_wrapper_name Õâ¸ö index Óà wrapperName Õâ¸ö×ֶνøÐÐ document µÄÏà¹Ø²éѯ¡£ÀýÈ磺

Çåµ¥ 12. ¸ù¾ÝË÷Òý²éѯ

import com.Cloudant.client.api.CloudantClient;
import com.Cloudant.client.api.Database;
import com.Cloudant.client.api.model.IndexField;
import com.Cloudant.client.api.model.IndexField.SortOrder;
import com.ibm.fordme.common.config.ConfigurationUtil;
import com.ibm.fordme.common.constants.DBConstants;
import com.ibm.ws.objectgrid.config.jaxb.deploymentPolicy.Map;
import Java.util.List;
public class CloudantTest {
public static void main(String[] args) {
String url = ConfigurationUtil.getUserDefinedString(DBConstants.CLOUDANT_URL);
String username = ConfigurationUtil.getUserDefinedString(DBConstants.CLOUDANT_USERNAME);
String password = ConfigurationUtil.getUserDefinedString(DBConstants.CLOUDANT_PASSWORD);
CloudantClient client = new CloudantClient(url, username, password);
Database db = client.database(ConfigurationUtil.getUserDefinedString("db_name"), false);
//Õë¶Ô wrapperName ×ֶν¨Á¢ index
db.createIndex("index_wrapper_name", "index_test", null,
new IndexField[] { new IndexField("wrapperName", SortOrder.desc) });
//¸ù¾ÝÒѽ¨Á¢ index µÄ×ֶΣ¬¶¨Òå²éѯÌõ¼þ
String testIndex = "{\"wrapperName\":{ \"$gt\": null }}";
//Óà map ½ÓÊÕ²éѯ½á¹û
List<Map> map = db.findByIndex(testIndex, Map.class);
System.out.println(map);
}
}

ÔÚÉÏÃæµÄ´úÂëÖУ¬ÓÉÓÚÎÒÃǽ¨Á¢ÁË wrapperName Õâ¸ö×Ö¶ÎµÄ index£¬Òò´ËÎÒÃǾͿÉÒÔÎ§ÈÆÕâ¸ö×ֶζ¨Òå²éѯÌõ¼þ£¬ÉÏÃæµÄ´úÂëÖвéѯÌõ¼þΪ wrapperName ´óÓÚ null£¬Ò²¾ÍÊÇ˵ֻÓÐ wrapperName Õâ¸ö×ֶδæÔÚµÄ document ¶¼»á±»·µ»Ø¡£Òò´ËÎÒÃÇ¿ÉÒԵõ½½á¹ûÈçÏ£º

Çåµ¥ 13. Ë÷Òý²éѯ½á¹û

[com.ibm.ws.objectgrid.config.jaxb.deploymentPolicy.Map@63d94f05, 
com.ibm.ws.objectgrid.config.jaxb.deploymentPolicy.Map@4fd30479,
com.ibm.ws.objectgrid.config.jaxb.deploymentPolicy.Map@26cacce0]

ÔÚÕâÀïÎÒÃÇҪעÒâÒ»µã£¬ÔÚÓ¦Óà index ʱһ¶¨Òª½÷É÷£¬Ó¦µ±ÌáǰÃ÷È·ÄÄЩ×Ö¶ÎÐèÒª½¨Á¢index£¬ÄÄЩ²»ÐèÒª¡£Èç¹ûÎÒÃÇËù´¦ÀíµÄÊý¾ÝÆä¹æÄ£³Ê¶¯Ì¬Ôö³¤£¬ÄÇôµ±Êý¾Ý¹æÄ£Ìرð´óʱ£¬ÔÙÈ¥ÁÙʱÌí¼Óij¸ö×Ö¶ÎµÄ index ½«»áÏûºÄ²»ÉÙʱ¼ä¡£ÔÙÕߣ¬¶ÔÓÚ Cloudant£¬ÎÒÃÇÈç¹ûÐèÒª°´ÕÕij¸ö×ֶνøÐÐ document ÅÅÐò£¬ÄÇôҲ±ØÐëÕë¶ÔÕâ¸ö×Ö¶ÎÌáǰ½¨Á¢ºÃ index£¬·ñÔò½«ÎÞ·¨Ê¹Óà sort ¹¦ÄÜ£¬Õâ¸öÎÒÃÇÔÚºóÃæ½²½â RESTful µ÷ÓÃʱÔÙÊö¡£

Ïò Cloudant Êý¾Ý¿âÉÏ´«¸½¼þ

ÔÚ Cloudant ÀÎÒÃÇÒ²¿ÉÒÔÉÏ´«Îļþ×÷Ϊ¸½¼þ½øÐд洢¡£ÕâÀïÎÒÃÇÒÔÉÏ´«Í¼Æ¬À´¾ÙÀý˵Ã÷£º

Ê×ÏÈ£¬ÎÒÃǶ¨ÒåÒ»¸ö JavaBean£¬ÀïÃæ°üº¬ name, createdBy, updatedBy ÕâÈý¸öÊôÐÔ¡£Image Àà¼Ì³ÐÁË Cloudant ÖÐµÄ Document À࣬ÕâÑùÎÒÃÇ¿ÉÒÔͨ¹ý document µÄ»ù±¾ÊôÐÔ½øÐÐ attachment µÄÉèÖá£

Çåµ¥ 14. н¨Í¼Æ¬ JavaBean

import com.Cloudant.client.api.model.Document;
public class Image extends Document {
private String name;
private String created_by;
private String updated_by;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCreated_by() {
return created_by;
}
public void setCreated_by(String created_by) {
this.created_by = created_by;
}
public String getUpdated_by() {
return updated_by;
}
public void setUpdated_by(String updated_by) {
this.updated_by = updated_by;
}
}

½ÓÏÂÀ´£¬ÎÒÃǶ¨ÒåÒ»¸öÀàÀ´½øÐÐͼƬµ½ base64 string µÄת»»¡£ÒòΪ¶ÔÓÚ Cloudant µÄ attachment£¬ËüÊÇͨ¹ý base64 string À´´æ´¢¸½¼þÄÚÈݵġ£µ±È»ÔÚÕâÀÐèҪ˵Ã÷Ò»µãµÄÊÇ£¬ÎÒÃÇÕâÀïÖ»ÊÇΪÁ˱¾½ÚʾÀýµÄ½²½â¶ø¶¨ÒåÁËÕâ¸öÀ࣬½ñºóΪÁË·½±ãÎÒÃÇÒ²¿ÉÒÔÖ±½Óͨ¹ýÍøÂçÉ쵀 base64 ת»»¹¤¾ßÀ´µÃµ½Í¼Æ¬µÄ base64 string¡£ÕâÀïÓÐÒ»¸öÓ¦Óó¡¾°£¬Èç¹ûÎÒÃÇÓ¦Óà RESTful ¿ò¼ÜÀ´½øÐÐÏîÄ¿¿ª·¢£¬ÄÇôÎÒÃǺÜÇå³þ£¬ÕâÑù×öǰºǫ́ÊÇ·ÖÀ뿪µÄ£¬ÄÇô¶ÔÓÚͼƬÉÏ´«£¬ÎÒÃǵĺǫ́ REST ½Ó¿Ú½«Ö»¹ØÐÄǰ̨´«¹ýÀ´µÄ base64 string ¶ø²¢²»Àí²ÇÕâ¸ö base64 string ÊÇÈçºÎÔÚǰ̨ͨ¹ýͼƬת»»µÃµ½µÄ¡£ÕâÒ²¾ÍÊÇÎÒΪʲô˵ÏÂÃæÕâ¸öÀàµÄ¶¨ÒåÖ»ÊÇΪÁËʾÀýµÄ½²½â¶ø´æÔڵġ£

ÕâÀïÎÒÃÇÐèÒªÒýÈë apache µÄ commons.codec Õâ¸ö jar °ü¡£

Çåµ¥ 15. ͼƬ-Base64 String ת»»Æ÷

import org.apache.commons.codec.binary.Base64;
import Java.io.FileInputStream;
import Java.io.InputStream;
import Java.io.PrintStream;
public class Image2Base64 {
//½«ÎļþתΪ base64 string
public String Base64String(String path) throws Exception {
InputStream in = new FileInputStream(path);
byte[] data = new byte[in.available()];
in.read(data);
in.close();
String encoder = Base64.encodeBase64String(data);
return encoder;
}
public InputStream Base64Stream(String path) throws Exception {
InputStream in = new FileInputStream(path);
return in;
}
public static void main(String[] args) throws Exception {
Image2Base64 test = new Image2Base64();
String result = test.Base64String("C:/Users/IBM_ADMIN/Desktop/IBM.png");
PrintStream out = new PrintStream("C:/Users/IBM_ADMIN/Desktop/IBMBase64Code.txt");
out.print(result);
out.close();
}
}

ÓÐÁËÉÏÃæÕâ¸öÀ࣬ÎÒÃDZã¿ÉÒÔ½«Í¼Æ¬×ª»»Îª base64 string£¬ÓÚÊÇÎÒÃǶ¨ÒåÏÂÃæÕâ¸öÀà×÷ΪʾÀý£º

Çåµ¥ 16. Ïò Cloudant Êý¾Ý¿âÉÏ´«Í¼Æ¬

import com.Cloudant.client.api.CloudantClient;
import com.Cloudant.client.api.Database;
import com.Cloudant.client.api.model.Attachment;
import com.ibm.fordme.common.config.ConfigurationUtil;
import com.ibm.fordme.common.constants.DBConstants;
public class CloudantTest {
public static void main(String[] args) throws Exception {
String url = ConfigurationUtil.getUserDefinedString(DBConstants.CLOUDANT_URL);
String username = ConfigurationUtil.getUserDefinedString(DBConstants.CLOUDANT_USERNAME);
String password = ConfigurationUtil.getUserDefinedString(DBConstants.CLOUDANT_PASSWORD);
CloudantClient client = new CloudantClient(url, username, password);
Database db = client.database(ConfigurationUtil.getUserDefinedString("db_name"), false);
Image image = new Image();
image.setId("image001");
image.setName("IBMLOGO");
image.setCreatedBy("xayangxy@cn.ibm.com");
Image2Base64Tool tool = new Image2Base64Tool();
//»ñµÃ base64 string
String base64Code = tool.getBase64String("C:/Users/IBM_ADMIN/Desktop/IBM.png");
//¶¨Òå attachment£¬ÓÃÒÔ´æ´¢ÎļþÉú³ÉµÄ base64 string
Attachment attachment = new Attachment();
attachment.setData(base64Code);
attachment.setContentType("image");
image.addAttachment("IBMLOGO", attachment);
//´æ´¢Í¼Æ¬
db.save(image);
}
}

¿ÉÒÔ¿´µ½£¬ÉÏÃæµÄ code ·Ç³£ºÃÀí½â£¬Ç°¼¸ÐкÍÉÏÃæµÄ¼¸¸öʾÀý¿ª¶ËÒ»Ñù£¬ÊÇÈ¡µÃÊý¾Ý¿âµÄ·ÃÎÊȨÏÞ£¬Ö®ºóÎÒÃÇʵÀý»¯ÁËÒ»¸ö image ¶ÔÏ󣬲¢ÊµÀý»¯ÁËÒ»¸ö attachment¡£¿ÉÒÔ¿´µ½£¬attachment µÄÄÚÈÝÐèÒªÓà base64 string ½øÐÐÉèÖ㬽ø¶øÎÒÃÇ»¹ÏóÕ÷ÐÔµÄÉèÖÃÁËͼƬµÄÀàÐÍΪ¡°image¡±£¬¶øÊµ¼ÊÉÏ content type µÄÉèÖò¢ÎÞʵ¼ÊµÄÒâÒ壬ºóÃæµÄ¹ý³ÌÏë±Ø´ó¼Ò¶¼ºÜÊìϤ£¬Ò²¾ÍÊÇÎÒÃǵڶþ½Ú½éÉÜµÄ create document to Cloudant£¬´æ´¢Õâ¸ö Bean µ½Êý¾Ý¿âÖм´Íê³ÉÁ˸½¼þµÄÉÏ´«¹¦ÄÜ¡£ÈçÏÂͼËùʾ£º

ͼ 7. Cloudant Îĵµ¸½¼þչʾ

¸üÐÂÊý¾Ý¿âÎĵµ

ÔÚ Cloudant Êý¾Ý¿âÖиüÐÂÒ»¸ö document ÆäʵºÍ´´½¨Ò»¸ö document ÊǷdz£ÀàËÆµÄ£¬Ò²ºÜ¼òµ¥£¬ÕâÀïÎÒÃÇ»ùÓÚÉÏÃæµÄ image ʾÀý¾ÙÒ»¸ö¼òµ¥µÄÀý×Ó£¬ÈçÏ´úÂ룺

Çåµ¥ 17. ¸üРCloudant Êý¾Ý¿âÎĵµ

import com.Cloudant.client.api.CloudantClient;
import com.Cloudant.client.api.Database;
import com.ibm.fordme.common.config.ConfigurationUtil;
import com.ibm.fordme.common.constants.DBConstants;
public class CloudantTest {
public static void main(String[] args) throws Exception {
String url = ConfigurationUtil.getUserDefinedString(DBConstants.CLOUDANT_URL);
String username = ConfigurationUtil.getUserDefinedString(DBConstants.CLOUDANT_USERNAME);
String password = ConfigurationUtil.getUserDefinedString(DBConstants.CLOUDANT_PASSWORD);
CloudantClient client = new CloudantClient(url, username, password);
Database db = client.database(ConfigurationUtil.getUserDefinedString("db_name"), false);
String id = "image001";
Image image = db.find(Image.class, id);
image.setName("IBMLOGOSHOW");
db.update(image);
}
}

¿ÉÒÔ¿´µ½Õâ¸öʾÀýÖÐÌåÏÖ±¾½ÚÄÚÈݵÄÖ»ÓÐ×îºóÃæµÄÕâÈýËÄÐдúÂ룬²»ÄÑÀí½â£¬ÎÒÃÇÊ×ÏÈÒªÖªµÀÐèÒª±»¸üÐ嵀 document µÄ id£¬ÕâÀïÎÒÃÇÑ¡Ôñ֮ǰ´æ´¢µÄ image001 Õâ¸ö document£¬È»ºóÎÒÃÇ»ñÈ¡Õâ¸ö document Ëù¶ÔÓ¦µÄ JavaBean£¬Ö®ºóÎÒÃDZã¿ÉÒÔͨ¹ý db.update ·½·¨½øÐÐ document ¸üÐÂÁË¡£ÕâÀïÐèҪעÒâµÄÒ»¸öÎÊÌâÊÇ£¬ÎÒÃDZØÐëÌáǰ֪µÀ±»¸üРdocument µÄ id ºÍÆäËù¶ÔÓ¦ JavaBean µÄÀàÐÍ¡£Õâ¸öǰÌáÊÇÎ޿ɺñ·ÇµÄ£¬ÉèÏëÕâÑùµÄÒ»¸ö³¡¾°£¬ÎÒÃǽøÐÐ RESTful ¿ª·¢Ê±£¬Èç¹ûÓÐ update ÕâÑùµÄÒ»¸ö REST service£¬ÄÇô½Ó¿ÚÖбØÈ»ÒªÌṩ id Õâ¸ö²ÎÊý×÷ΪÊäÈëÏ¶ø¶ÔÓÚ document Ëù¶ÔÓ¦µÄ JavaBean£¬ÎÒÃÇÒ»°ãΪÁ˼ܹ¹ÇåÎú£¬Ò»¸öÊý¾Ý¿âÖÐÒ»°ãÖ»´æ´¢Ò»ÖÖÀàÐ굀 document£¬ÀýÈçÎÒÃÇÓÐÒ»¸öÊý¾Ý¿â½Ð ibm_image£¬ÄÇôÕâ¸ö¿âÖд洢µÄËùÓÐ documents ¶¼½«ÊÇ Image Õâ¸öÀàÐ굀 documents¡£Òò´ËÎÒÃÇÔÚ×ö¸üвÙ×÷ʱ£¬ÐèҪת»»µÄ JavaBean ÀàÐÍÊÇÍêÈ«¿ÉÖªµÄ¡£

ɾ³ýÊý¾Ý¿âÎĵµ

¶ÔÓÚɾ³ý²Ù×÷£¬Ôò¸üΪ¼òµ¥¡£ÎÒÃÇÖ»Ðèµ÷Óà db.remove ·½·¨¼´¿ÉÍê³É delete document ²Ù×÷¡£ÈçÏ´úÂëʾÀý£º

Çåµ¥ 18. ɾ³ý Cloudant Êý¾Ý¿âÎĵµ

import com.Cloudant.client.api.CloudantClient;
import com.Cloudant.client.api.Database;
import com.ibm.fordme.common.config.ConfigurationUtil;
import com.ibm.fordme.common.constants.DBConstants;
public class CloudantTest {
public static void main(String[] args) throws Exception {
String url = ConfigurationUtil.getUserDefinedString(DBConstants.CLOUDANT_URL);
String username = ConfigurationUtil.getUserDefinedString(DBConstants.CLOUDANT_USERNAME);
String password = ConfigurationUtil.getUserDefinedString(DBConstants.CLOUDANT_PASSWORD);
CloudantClient client = new CloudantClient(url, username, password);
Database db = client.database(ConfigurationUtil.getUserDefinedString("db_name"), false);
String id = "image001";
Image image = db.find(Image.class, id);
db.remove(image);
}
}

ÕâÀïÎÒÃÇÈÔÈ»ÐèÒªÖªµÀ document µÄ id£¬²¢Í¨¹ý JavaBean »ñȡҪɾ³ýµÄ document Ëù¶ÔÓ¦µÄ¶ÔÏ󣬴ӶøÉ¾³ýÕâ¸ö document¡£µ±È»Ò²ÓÐÁíÒ»¸ö·½·¨¹©Ê¹ÓÃÕß½øÐе÷Ó㬼´£º

db.remove(String _id, String _rev)

Õâ¸ö·½·¨ÐèÒªÖªµÀ document ¶ÔÓ¦µÄ_id ºÍ_rev£¬²Å¿É½øÐÐɾ³ý²Ù×÷£¬µ«Õâ¸ö·½·¨±¾Éí±ÊÕß²¢²»ÍƼöʹÓá£

»ùÓÚ RESTful API ²éѯ Cloudant Êý¾Ý¿â

Cloudant Ϊ¿ª·¢ÕßÌṩÁ˷dz£·½±ãµÄ RESTful API£¬ÆäÖÐ×îÖØÒªµÄÒ»¸ö API ¼´£ºxxx.Cloudant.com/dbname/_find£¬ÎÒÃÇ¿ÉÒÔͨ¹ý¶Ô´Ë API µÄµ÷ÓýøÐÐ document ²éѯ£º

ͼ 8. ͨ¹ý selector ²éѯ Cloudant Êý¾Ý¿â

ÕâÀïÎÒÃÇʹÓÃÁË chrome ä¯ÀÀÆ÷×Ô´øµÄ REST Client ½øÐÐ rest ²éѯ£¬Cloudant Ö§³Ö selector, sort, limit, skip, fields ÕâЩ operators¡£ÉÏÃæµÄʾÀýÖÐÎÒÃǾÍʹÓÃÁË selector Õâ¸ö operator¡£Ç°ÃæËµ¹ýÈç¹ûÒª¶Ôij¸ö×ֶνøÐÐ sort£¬Ôò±ØÐë¶Ô´Ë×ֶν¨Á¢ index£¬ÕâÀïÎÒÃǾÙÁ½¸öÀý×Ó£º

Ê×ÏÈ£¬µ±Òª½øÐÐ sort µÄ×Ö¶ÎûÓн¨Á¢ index ʱ£¬Èç¹û½øÐÐ sort ²Ù×÷£¬Ôò»á³öÏÖÈçϽá¹û£º

ͼ 9. ÎÞ¶ÔÓ¦ index ʱ sort ¹¦ÄÜʧЧ

¿ÉÒÔÇå³þµØ¿´µ½£¬Cloudant µÄ RESTful API ·µ»Ø¸øÎÒÃÇÁË sort ×ֶζÔÓ¦ index ²»´æÔڵĴíÎóÌáʾ¡£

½ÓÏÂÀ´£¬ÎÒÃÇÀûÓÃÇ°Ãæ Create Index Õ½ڽ²½â¹ýµÄÄÚÈÝ£¬¶Ô name ×ֶν¨Á¢ index£¬Ö®ºóÔٴβéѯ£¬¸ù¾Ý request body ÀïµÄ²éѯÌõ¼þ£¬ÎÒÃDzéѯÁË£¬name ×ֶδæÔÚµÄËùÓÐ documents£¬²¢ÇÒ°´ÕÕ name ×ֶνøÐнµÐòÅÅÐò£¬µÃµ½½á¹ûÈçÏ£º

ͼ 10. ÓжÔÓ¦ index ʱ»ùÓÚ sort ¹¦ÄܲéѯÎĵµ

ÕâÀïÎÒÃÇ»¹¿ÉÒÔÉèÖ÷ÖÒ³¹¦ÄÜ£¬ÀûÓà limit ºÍ skip£¬±ÈÈçÎÒÃÇÒª²éѯ sort Ö®ºóÖмäÁ½ÌõÊý¾Ý£¬ÄÇôÎÒÃÇ¿ÉÒÔÀûÓÃÏÂÃæµÄ²éѯÌõ¼þ£º

Çåµ¥ 19. ²éѯÌõ¼þ

{"selector":{"name":{"$gt":null}}, "sort":[{"name":"desc"}], "limit":2, "skip":1}

ÕâÑùÎÒÃǾͿÉÒԵõ½ÏëÒªµÄ½á¹ûÁË¡£

Cloudant Êý¾Ý¿â¸´ÖÆ

ͼ 11. Cloudant Êý¾Ý¿â¸´ÖÆÈë¿Ú

¶Ô Cloudant Êý¾Ý¿â½øÐÐ replicate£¬ÎÒÃǵǼ Cloudant ºó£¬ÔÚÒª replicate µÄÊý¾Ý¿âÓÒ²àµã»÷ replicate button£¬Ö®ºóÎÒÃÇ¿ÉÒÔ¿´µ½ÈçϽçÃæ£º

ͼ 12. Cloudant ±¾µØÊý¾Ý¿â¸´ÖÆ

ÊäÈë replicate µÄÐÂÊý¾Ý¿âÃû£¬µã»÷ replicate ¼´¿É¡£³ýÁËÉÏÃæµÄ±¾µØÄ£Ê½Í⣬ÎÒÃÇÒ²¿ÉÒÔ replicate Ô¶³ÌÊý¾Ý¿â£¬»»¾ä»°Ëµ£¬¾ÍÊÇÎÒÃÇ¿ÉÒÔ½«ÁíÒ»¸ö Cloudant ÕË»§ÖеÄijһ¸öÊý¾Ý¿â replicate µ½µ±Ç° Cloudant ÕË»§ÖС£Óë±¾µØÄ£Ê½Ëù²»Í¬µÄÊÇÎÒÃÇÔÚ source database Ñ¡ÏîÖÐÒªÌîÈë¹æ¶¨Ñùʽ

£¨https://$USERNAME:$PASSWORD@$REMOTE_USERNAME.Cloudant.com/$DATABASE_NAME£©µÄ·ÃÎÊȨÏÞ£¬ÈçÏÂËùʾ£º

ͼ 13. Cloudant Ô¶³ÌÊý¾Ý¿â¸´ÖÆ

²»ÄÑ¿´³ö£¬Cloudant ÖжÔÊý¾Ý¿âµÄ replicate ²Ù×÷»¹ÊǷdz£¼òµ¥·½±ãµÄ¡£

»ùÓÚ Bluemix ƽ̨µÄ Cloudant service Ó¦ÓÃ

¶ÔÓÚ Bluemix£¬Ïë±Ø´ó¼Ò¶¼ÓÐËù¶úÎÅ£¬ÔÚ±¾ÎÄÕÂÖв»×÷ÏêÊö£¬ÓÐÐËȤ¿ÉÒԲο¼ developerWorks ÉϵÄÏà¹ØÎÄÕ£¬»ò²Î¿¼ Bluemix µÄ¹Ù·½Îĵµ¡£ÎÒÃÇÖªµÀ£¬Bluemix ÊÇ IBM ¹«Ë¾×î¾ßÓдú±íÐÔµÄÔÆÆ½Ì¨£¬»ùÓÚ Bluemix ÎÒÃÇ¿ÉÒÔ·½±ãµÄ´´½¨×Ô¼ºµÄ¹¤³Ì£¬²¢Îª¹¤³Ì°ó¶¨ÐèÒªµÄ service£¬Õâ¶ÔÓû§À´ËµÊǷdz£·½±ãµÄ¡£µ±È»£¬Cloudant Ò²ÊÇ Bluemix ¿É°ó¶¨µÄ service Ö®Ò»¡£ÏÂÃæÎÒÃǽ«½²Êö»ùÓÚ Bluemix ƽ̨µÄ Cloudant service Ó¦Óá£

µÇ¼ Bluemix£¬ÎÒÃÇн¨Ò»¸ö Liberty for Java µÄ app:

ͼ 14. »ùÓÚ Bluemix µÄ Cloudant service ½çÃæ

½Ó×ÅÎÒÃǵã»÷¡±ADD A SERVICE OR API¡±, ÔÚ Data and Analytics Ŀ¼ÏÂÕÒµ½ Cloudant service£¬ÈçÏÂ:

ͼ 15. »ùÓÚ Bluemix н¨ Cloudant ·þÎñ

µã»÷ºó½øÈë create service Ò³Ãæ£¬ÎÒÃDZã¿ÉÒÔ create Ò»¸öÐ嵀 Cloudant service ²¢°ó¶¨¸øÖ®Ç°Ð½¨µÄ APP£¬ÈçͼËùʾ£º

ͼ 16. »ùÓÚ Bluemix µÄ Cloudant service ÐÅÏ¢ÅäÖÃ

µã»÷ create£¬Ö®ºóÎÒÃDZãµÃµ½Á˰󶨺ÃÁË Cloudant service µÄ Java liberty app£º

ͼ 17. »ùÓÚ Bluemix µÄ Cloudant service ½¨Á¢Íê³É

½øÈë app£¬ÎÒÃÇ¿ÉÒÔÔÚ×ó²àÕÒµ½»·¾³±äÁ¿Õâ¸öÑ¡Ïµã»÷½øÈëºó£¬ÎÒÃÇ·¢ÏÖÒѾ­°ó¶¨µÄ Cloudant service µÄËùÓÐȨÏÞÐÅÏ¢±»ÁÐÔÚ VCAP »·¾³±äÁ¿ÀÈçÏÂËùʾ£º

ͼ 18. »ùÓÚ Bluemix µÄ Cloudant service »·¾³±äÁ¿

ÕâÀïÎÒÃÇ»ØÏëÒ»¿ªÊ¼ÔÚ¡°Cloudant Êý¾Ý¿â Java ¿ª·¢Ç°ÆÚÅäÖá±Õ½ÚÖÐÌáµ½¹ýµÄ£¬ConfigurationUtil ÀàÖÐÎÒÃÇ¿ÉÒÔµ÷Óà getUserDefinedString Õâ¸ö·½·¨£¬Ò²¾ÍÊÇ˵Ëü¿ÉÒÔ´Ó user defined »·¾³±äÁ¿Àï¶ÁÈ¡·ÃÎÊȨÏÞÐÅÏ¢£¬ÈçÏ£º

ͼ 19. »ùÓÚ Bluemix µÄ Cloudant service ×Ô¶¨Òå»·¾³±äÁ¿

´ËʱÎÒÃÇËùʾµÄÄÚÈÝÊÇ֮ǰÎÒÃÇÊÖ¹¤½¨Á¢µÄ Cloudant Êý¾Ý¿âµÄ·ÃÎÊȨÏÞ¡£ÔÚÕâÀïÎÒÃÇ¿ÉÒÔ½«ÆäÄÚÈÝ»»ÎªÉÏÃæ°ó¶¨ºó»·¾³±äÁ¿ÖеķÃÎÊȨÏÞ¡£ÆäʵÕâÀBluemix ±¾Éí¾ÍÓÐ VCAP »·¾³±äÁ¿£¬ÎÒÃǰó¶¨ÁË Cloudant service Ö®ºó£¬Æäʵ¿ÉÒÔͨ¹ý Java API ½ÓÈ¡µÃ»·¾³±äÁ¿ÖеÄËùÓÐÐÅÏ¢£¬Òò´ËÎÒÃÇ¿ÉÒÔ¶Ô ConfigurationUtil Õâ¸öÀàÓÐÏÂÃæµÄÀ©Õ¹£º

ͼ 20. »ùÓÚ Bluemix µÄ Cloudant service ·½·¨À©Õ¹

¿ÉÒÔ¿´µ½ÎÒÃǶ¨ÒåÁË getVcapString Õâ¸ö·½·¨£¬Òò´ËÕâ¸ö·½·¨µÄÂß¼­ÊÇ£¬Ê×ÏÈ·ÃÎÊ vcap »·¾³±äÁ¿£¬Èç¹ûûÓÐÕÒµ½£¬Ôòµ÷Óà getUserDefinedString È¥ user defined »·¾³±äÁ¿ÖнøÐвéÕÒ£¬Èç¹ûÈÔȻδÕÒµ½·ÃÎÊȨÏÞÐÅÏ¢£¬ÔòÈ¥ src Ŀ¼Ï·ÃÎÊ config.properties Îļþ»ñÈ¡·ÃÎÊÐÅÏ¢¡£

Cloudant RESTful API Ïê½â

ÔÚ֮ǰÎÒÃǽéÉÜÁË Cloudant RESTful API query ²¿·ÖµÄÓ÷¨£¬Ò²½éÉÜÁË»ùÓÚ Bluemix ƽ̨µÄ Cloudant service Ó¦Óá£ÔÚÕâÒ»½Ú£¬ÎÒÃǽ«½áºÏÕâÁ½¸ö·½Ãæ½øÐн²½â¡£ Ϊ·½±ãÀí½â£¬ÆäËüÅäÖõĹý³Ì±ÊÕß²»ÔÙ½øÐÐ׸Êö£¬ÏÂÃæÎÒÃǽ«»ùÓÚÒ»¸öÒѾ­ÊµÏÖºÃµÄ RESTful ¼Ü¹¹µÄ liberty Java app ½øÐÐ RESTful API µÄµ÷Óý²½â¡£Èçͼ£º

ͼ 21. »ùÓÚ Bluemix service µÄ RESTful API ²éѯ

ÔÚÕâÀïÎÒÃÇÒѾ­ÔÚ Bluemix Éϲ¿ÊðºÃÁË RESTful app£¬Òò´ËÉÏÃæµÄ URL Öм´ÎªÎÒÃÇ RESTful services ÖÐµÄÆäÖÐÒ»¸ö£¬ÕâÀïÎÒÃÇÓõäÐ͵IJéѯ²Ù×÷À´½øÐн²½â¡£¿ÉÒÔ¿´µ½ÉÏÃæµÄ http ÇëÇóÖÐ request body ÉèÖÃÁ˲éѯÌõ¼þ£¬¼´

1£©document ´æÔÚ

2£©°´ name ½øÐнµÐòÅÅÁÐ

3£©Ö»Êä³ö name ºÍ theme ÕâÁ½¸ö×Ö¶Î

4£©Ö»Êä³öÈýÌõ¼Ç¼£¬ÓÚÊÇÎÒÃÇ¿ÉÒԵõ½ÈçϽá¹û£º

ͼ 22. »ùÓÚ Bluemix service µÄ RESTful API ²éѯ½á¹û

ÓÐÁËÕâÑùµÄºǫ́²Ù×÷£¬¶ÔÓÚÒѱ»°þÀ뿪µÄǰ̨À´Ëµ£¬¿ª·¢Õß¿ÉÒԺܷ½±ãºÜÇåÎúµÄ½øÐÐǰ̨¿ª·¢ÒÔ¼°ºÍºǫ́µÄÊý¾Ý½»»¥¡£

³ý´ËÖ®Í⣬ÎÒÃÇÔÙ¸ø³öÒ»¸ö¸´ÔÓÀàÐÍ document µÄ²éѯʾÀý£º ÀýÈç document µÄÄÚÈÝÈç

Çåµ¥ 20. ¸´ÔÓ Json ÎļþʾÀý

{
"_id": "100000000000000000",
"_rev": "1-67d924da9402c2f6d70a229f91bfe0e5",
"geometry": {
"type": "Point"
},
"properties": {
"mmTrajectory": {
"altitude": 0,
"heading": 0,
"latitude": 0,
"longitude": 0,
"moID": "1446118616715166666",
"note": "By-passed because of missing information or point is not in a known region",
"speed": 1.314919948566666,
"tripID": "",
"ts": 1452071840
},
"packet": {
"meta": {
"account": "test",
"event": "track"
},
"payload": {
"asset": "1446118616715171320",
"connection_id": 795943814836519000,
"connection_id_str": "795943814836519042",
"fields": {
"MDI_CUSTOM_PID_27": {
"b64_value": "ODAuOQ=="
},
"MDI_CUSTOM_PID_49": {
"b64_value": "Mi4xODQzMTQ1NDQzNjM0MjM3RTE4"
},
"MDI_CUSTOM_PID_50": {
"b64_value": "MS4xMzU5NDQ4Mjc3MDA1MTA3RTE3"
},
"MDI_CUSTOM_PID_7": {
"b64_value": "NTYuNDcwNTg4MjM1Mjk0MTE2"
},
"MDI_CUSTOM_PID_8": {
"b64_value": "My4w"
}
},
"id": 795944156529666666,
"id_str": "795944156529666666",
"index": 1110,
"received_at": "2016-01-06T09:17:54Z",
"recorded_at": "2016-01-06T09:17:20Z",
"recorded_at_ms": "2016-01-06T09:17:20.000Z",
"streams_received_at": "2016-01-06T09:17:55Z"
}
},
"vehicleId": "1446118616715666666",
"pid_fields": {
"charge_level": {
"value": "56.470588235294116",
"tip": "56.470588235294116"
},
"charge_status": {
"value": "3",
"tip": "3"
},
"charge_range": {
"value": 80.9,
"tip": "80.9"
}
},
"pidop_processed_at": "2016-01-06T09:18:01Z"
},
"type": "feature"
}

Èç¹ûÎÒÃÇÒª¶ÔÆäÖеÄijЩ×ֶνøÐÐÌõ¼þ²éѯ£¬ÔòÔÚ http ÇëÇóʱ request body ÖеÄ×ֶαØÐ뾫ȷµ½ Æä¾ø¶Ô·¾¶£¬ÀýÈçÕë¶ÔÉÏÃæµÄ document£¬ÎÒÃÇÓÃÏÂÃæµÄÓï¾ä½øÐвéѯ£º

Çåµ¥ 21. Cloudant Êý¾Ý¿â RESTful API ¸´ÔÓ²éѯÓï¾ä

{
"selector":
{
"properties.packet.payload.asset":"1446118616715171320","properties.packet.payload.recorded_at":{
"$gte":"2015-11-01T00:00:00Z"
},"
properties.pid_fields.charge_level":{"$exists":true}}, 
"sort":[{"properties.packet.payload.asset":"desc"},{"properties.packet.payload.recorded_at":"desc"}], 
"limit":2
}

¿ÉÒÔ¿´µ½£¬Ïñ charge_level£¬asset µÈµÈÕâÑùµÄ×ֶΣ¬¶¼¾«È·µ½Á˾ßÌåµÄ·¾¶£¬±ÈÈ磺properties.packet.payload.asset ºÍ properties.pid_fields.charge_level¡£Ö»ÓÐÕâÑùÎÒÃDzſÉÒԳɹ¦µÄ²éѯ³öÏëÒªµÄ½á¹û¡£

Cloudant Ó¦ÓÃ×¢ÒâÊÂÏî

Cloudant µÄÓŵãÏë±Ø´ó¼ÒÒÑÓÐÌå»á£¬ÕâÀï²»±Ø¶à˵£¬Ôڴ˱ÊÕß×ܽáÁ½µãʹÓà Cloudant ʱÐèҪעÒâµÄµØ·½£º

1£©sort ¹¦ÄܵÄʹÓÃÊÇÓÐÏÞÖÆµÄ£¬µ±ÎÒÃÇÏë½øÐж༶ sort ²éѯʱ£¬ÀýÈç document ÖÐÓÐ a,b,c,d Ëĸö×ֶΣ¬Èç¹ûÎÒÃÇÏë¶Ô a,b,c ͬʱ½øÐÐÅÅÐò£¬Ôò±ØÐë´æÔÚÒ»¸ö a,b,c °ó¶¨ÔÚÒ»ÆðµÄ index£¬¶øÇÒÐèҪͬÐò¶¨Ò壬¼´¶¼ÊÇ desc »ò¶¼ÊÇ asc£¬¼´ÐèÒª´´½¨ÕâÑùµÄ index£º

Çåµ¥ 22. Ϊ¶à¼¶ÅÅÐò½¨Á¢¸´ºÏË÷Òý

db.createIndex("index_name_field", "indexes", null, new IndexField[] 
{
 new IndexField("a", SortOrder.desc),new IndexField("b",
 SortOrder.desc),new IndexField("c", SortOrder.desc)
 }
);
 

²¢ÇÒÖÁÉÙÒª±£Ö¤ÓÐÒ»¸ö sort µÄ×Ö¶ÎÒª´æÔÚÓÚ selector ÖС£

2£©selector ÊDzéѯ Cloudant RESTful API ʱ±ØÐëµÄ operator£¬µ±È»Óû§¿ÉÒÔ¸ù¾ÝÐèÒª½øÐÐÀ©Õ¹£¬ÈÃ×Ô¼º»ùÓÚ Cloudant Êý¾Ý¿âµÄ RESTful service ûÓÐÕâÑùµÄÏÞÖÆ¡£

½áÊøÓï

Cloudant ÊÇ IBM ¹«Ë¾·Ç³£¾ßÓдú±íÐԵIJúÆ·Ö®Ò»£¬ÎÒÃÇÖªµÀÔÚÔÆÆ½Ì¨´óÊý¾ÝÊ¢Ðеĵ±Ï£¬º£Á¿¹æÄ£Êý¾ÝµÄ´æ´¢ÎÞÒÉÊÇÈËÃÇ×î¹ØÐĵÄÎÊÌâ¡£Cloudant Êý¾Ý¿âÒÔÆä×ÔÉíÇ¿´óµÄ´¦Àí´ó¹æÄ£Êý¾Ý¡¢Ö§³Ö¸ß²¢·¢ÐзÃÎʵÄÓÅÊÆÊܵ½ÁËÒµ½ç¸ß¶ÈµÄÈϿɡ£±¾ÎÄϵͳµØ½éÉÜÁË Cloudant Êý¾Ý¿âµÄ¼¸ºõËùÓлù±¾²Ù×÷£¬Ï£ÍûÎÄÖÐÌáµ½µÄ¸ÅÄîºÍʾÀý´úÂë¶Ô¶ÁÕߵĿª·¢¹¤×÷Ìṩһ¶¨µÄ°ïÖú¡£

 

   
6112 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

MySQLË÷Òý±³ºóµÄÊý¾Ý½á¹¹
MySQLÐÔÄܵ÷ÓÅÓë¼Ü¹¹Éè¼Æ
SQL ServerÊý¾Ý¿â±¸·ÝÓë»Ö¸´
ÈÃÊý¾Ý¿â·ÉÆðÀ´ 10´óDB2ÓÅ»¯
oracleµÄÁÙʱ±í¿Õ¼äдÂú´ÅÅÌ
Êý¾Ý¿âµÄ¿çƽ̨Éè¼Æ

²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿â
¸ß¼¶Êý¾Ý¿â¼Ü¹¹Éè¼ÆÊ¦
HadoopÔ­ÀíÓëʵ¼ù
Oracle Êý¾Ý²Ö¿â
Êý¾Ý²Ö¿âºÍÊý¾ÝÍÚ¾ò
OracleÊý¾Ý¿â¿ª·¢Óë¹ÜÀí

GE Çø¿éÁ´¼¼ÊõÓëʵÏÖÅàѵ
º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ Nodejs¸ß¼¶Ó¦Óÿª·¢
ÖÐÊ¢Òæ»ª ׿Խ¹ÜÀíÕß±ØÐë¾ß±¸µÄÎåÏîÄÜÁ¦
ijÐÅÏ¢¼¼Êõ¹«Ë¾ PythonÅàѵ
ij²©²ÊITϵͳ³§ÉÌ Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À
ÖйúÓÊ´¢ÒøÐÐ ²âÊÔ³ÉÊì¶ÈÄ£Ðͼ¯³É(TMMI)
ÖÐÎïÔº ²úÆ·¾­ÀíÓë²úÆ·¹ÜÀí