【问题标题】:inserting TimeUUIDType as row key in phpcassa在 php cassa 中插入 TimeUUID 类型作为行键
【发布时间】:2013-06-11 16:14:59
【问题描述】:

我使用 Cassandra-Cluster-Admin 创建了一个简单的键空间和一个列族

我有一个名为 player 的列族

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

我真的需要一些帮助。谢谢

【问题讨论】:

    标签: php cassandra phpcassa


    【解决方案1】:

    我正在为 java 使用 hector 客户端

    我用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
                    )
                 );
    

    【讨论】:

      【解决方案2】:

      我发现了问题所在。 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);
          }
      

      【讨论】:

        猜你喜欢
        • 2014-06-05
        • 2016-10-02
        • 2015-12-30
        • 1970-01-01
        • 2014-02-27
        • 2022-11-28
        • 2015-11-26
        • 2015-11-23
        • 1970-01-01
        相关资源
        最近更新 更多