首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在phpcassa中插入TimeUUIDType作为行键

在phpcassa中插入TimeUUIDType作为行键
EN

Stack Overflow用户
提问于 2013-06-12 00:14:59
回答 2查看 296关注 0票数 0

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

我有一个名为players的列族

代码语言:javascript
复制
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;

代码语言:javascript
复制
$this->_connection_pool = new ConnectionPool($key_space, $this->_config['servers']);

我使用以下代码初始化ColumnFamily实例;

代码语言:javascript
复制
$this->_column_family = new ColumnFamily($this->_connection_pool, $column_family);

最后,我用下面的代码插入到列族中;

代码语言:javascript
复制
this->_column_family->insert(UUID::uuid1, $data);

数据数组如下所示;

代码语言:javascript
复制
$data = array('user_name' => 'aacanakin', 'full_name' => 'Aras Can Akin');

它没有插入,它显示以下内容;

代码语言:javascript
复制
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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-14 15:37:14

我发现了问题所在。如果行键为,则key_validation_class必须为TimeUUIDType。插入函数如下所示;

代码语言:javascript
复制
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);
    }
票数 0
EN

Stack Overflow用户

发布于 2013-06-12 14:26:09

我正在使用hector client for java

我用下面的UTF8Type和TimeUUID的组合键成功地完成了这件事,希望你能得到一些线索

代码语言:javascript
复制
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
                )
             );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17048934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档