UUID Cassandra

3

我是Cassandra的新手。我正在尝试向列族中插入一些值。配置文件中列族的定义如下:

<ColumnFamily Name="CommandQueue"
                    ColumnType="Super"
                    CompareWith="TimeUUIDType"
                    CompareSubcolumnsWith="UTF8Type"/>

无论我尝试向列族插入值时,都会收到“InvalidRequestException(why: UUIDs must be exactly 16 bytes)”的错误提示。
我正在使用batch_mutate()来插入列。
如何向列族插入值?
4个回答

5

3
以下是一个代码片段(来自Nick Berardi的程序员日志
public static Guid GenerateTimeBasedGuid(DateTime dateTime)
    {
        long ticks = dateTime.Ticks - GregorianCalendarStart.Ticks;

        byte[] guid = new byte[ByteArraySize];
        byte[] clockSequenceBytes = BitConverter.GetBytes(Convert.ToInt16(Environment.TickCount
            % Int16.MaxValue));
        byte[] timestamp = BitConverter.GetBytes(ticks);

        // copy node
        Array.Copy(Node, 0, guid, NodeByte, Node.Length);

        // copy clock sequence
        Array.Copy(clockSequenceBytes, 0, guid, GuidClockSequenceByte,clockSequenceBytes.Length);

        // copy timestamp
        Array.Copy(timestamp, 0, guid, 0, timestamp.Length);

        // set the variant
        guid[VariantByte] &= (byte)VariantByteMask;
        guid[VariantByte] |= (byte)VariantByteShift;

        // set the version
        guid[VersionByte] &= (byte)VersionByteMask;
        guid[VersionByte] |= (byte)((int)GuidVersion.TimeBased << VersionByteShift);

        return new Guid(guid);
    }

2
我会继续"Schildmejir"的内容。这里是如何将生成的GUID用于向列族插入值的方法。
Mutation foobar = new Mutation()
{
     Column_or_supercolumn = new ColumnOrSuperColumn() 
       { Super_column = new SuperColumn() 
         { Name = GuidGenerator.GenerateTimeBasedGuid(DateTime.Now).ToByteArray(), 
               Columns = listOfSomeColumns
          } 
        }
};

List<Column> foobarlist = new List<Column>();
listOfChannelIds.Add(new Column() { Name = utf8Encoding.GetBytes("somename"), Value = utf8Encoding.GetBytes(somestring), Timestamp = timeStamp });

根据需求,您可以将生成的GUID用于SupercolumnName或columnName中。


1
Cassandra期望UUID符合RFC 4122,因此您需要自己生成符合规范的值或使用所选语言的现有库(大多数语言都有免费的UUID生成库可用)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接