2013-06-11 63 views
0

行鍵我創建了一個簡單的密鑰空間和列家庭使用卡桑德拉 - 集羣管理員插入TimeUUIDType在phpcassa

我有一個列族命名的玩家

create column family player 
    with column_type = 'Standard' 
    and comparator = 'TimeUUIDType' 
    and default_validation_class = 'BytesType' 
    and key_validation_class = 'BytesType' 
    and rows_cached = 0.0 
    and row_cache_save_period = 0 
    and row_cache_keys_to_save = 2147483647 
    and keys_cached = 200000.0 
    and key_cache_save_period = 14400 
    and read_repair_chance = 1.0 
    and gc_grace = 864000 
    and min_compaction_threshold = 4 
    and max_compaction_threshold = 32 
    and replicate_on_write = true 
    and row_cache_provider = 'ConcurrentLinkedHashCacheProvider' 
    and compaction_strategy = 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'; 

我試圖插入具有行鍵TimeUUIDType的行。

我使用以下方法初始化ConnectionPool;

$this->_connection_pool = new ConnectionPool($key_space, $this->_config['servers']); 

我使用以下方法初始化ColumnFamily實例;

$this->_column_family = new ColumnFamily($this->_connection_pool, $column_family); 

最後,我使用此代碼插入到列族中;

this->_column_family->insert(UUID::uuid1, $data); 

數據數組如下所示;

$data = array('user_name' => 'aacanakin', 'full_name' => 'Aras Can Akin'); 

它沒有插入,它說以下;

Notice: unserialize(): Error at offset 0 of 9 bytes in /home/arascan/projects/peak-api/vendor/phpcassa/lib/phpcassa/Schema/DataType/UUIDType.php on line 16 

Notice: Trying to get property of non-object in /home/arascan/projects/peak-api/vendor/phpcassa/lib/phpcassa/Schema/DataType/UUIDType.php on line 17 

Notice: unserialize(): Error at offset 0 of 9 bytes in /home/arascan/projects/peak-api/vendor/phpcassa/lib/phpcassa/Schema/DataType/UUIDType.php on line 16 

Notice: Trying to get property of non-object in /home/arascan/projects/peak-api/vendor/phpcassa/lib/phpcassa/Schema/DataType/UUIDType.php on line 17 

Warning: Illegal offset type in /home/arascan/projects/peak-api/vendor/phpcassa/lib/phpcassa/AbstractColumnFamily.php on line 683 

我真的需要一些幫助。由於

回答

0

我發現出了問題。如果行鍵是,則key_validation_class必須是TimeUUIDType。插入功能如下:

class Cassandra 
{ 
    // the active connection pool inserted into 
    private $_connection_pool; 
    private $_column_family; 
    private $_config; 
    public function __construct($_config) 
    { 
     $this->_config = $_config; 
     $this->_connection_pool = null; 
     $this->_column_family = null; 
    } 

    public function connection($key_space) 
    { 
     if (is_null($this->_connection_pool)) { 

      try { 
       $this->_connection_pool = new ConnectionPool($key_space, 
           $this->_config['servers']);    
      } catch(Exception $e) { 
       echo $e->getMessage(); 
      } 
     } 

     return $this; 
    } 
    public function insert($column_family, $data = array()) 
    { 
     if (is_null($this->_column_family)) { 
      $this->_column_family = new ColumnFamily($this->_connection_pool, 
         $column_family);     
      $this->_column_family->insert_format = ColumnFamily::ARRAY_FORMAT; 
      $this->_column_family->return_format = ColumnFamily::ARRAY_FORMAT; 
     } 

     $key = UUID::uuid1(); 

     $raw_data = array(); 

     $i = 0; 
     foreach ($data as $k => $v) 
     { 
      $raw_data[$i][] = $k; 
      $raw_data[$i][] = $v; 
      $i++; 
     } 

     try { 
      $this->_column_family->insert($key, $raw_data); 
      $error = false; 
     } catch (Exception $e) { 
      $error = true; 
      echo $e->getMessage(); 
     } 

     return array('error' => $error); 
    } 
1

我使用威嚇客戶端的Java

我UTF8Type和TimeUUID的複合鍵初級講座做到了成功,希望你能得到一些線索

Composite compKey = new Composite(); 
compKey.addComponent("c1", HFactoryHelper.stringSerializer); 
compKey.addComponent(TimeUUIDUtils.getUniqueTimeUUIDinMillis(),HFactoryHelper.uuidSerializer); 

mutator.addInsertion("my row key", 
        "my CF", 
         HFactory.createColumn 
       (compKey,"my column value", 
       new CompositeSerializer() 
       , HFactoryHelper.stringSerializer 
       ) 
      );