20.9.10

Cassandra Sorting

Cassandra ไม่มีความสามารถในการ query เหมือน RDBMS ทั่วไป ดังนั้นเราจึงไม่สามารถกำหนดรูปแบบการเรียงลำดับ ขณะที่ดึงข้อมูลออกมา
เมื่อเราต้องการดึงข้อมูลแล้วให้มันเรียงลำดับ สิ่งเหล่านั้นเราต้องกำหนดลงใน ColumnFamily แต่ความจริง Cassandra จะเรียงลำดับข้อมูลตั้งแต่ตอนที่ใส่ข้อมูลลงใน cluster และคงที่ลำดับตัวข้อมูลเหล่านั้นไว้ดังนั้นเมื่อเราดึงข้อมูล ตัวข้อมูลเหล่านั้นจะถูกเรียงลำดับโดยอัตโนมัติ
การเรียงลำดับสามารถกำหนดใน ColumnFamily ด้วย attribute ที่ชื่อ CompareWith ด้วยชนิดข้อมูลดังนี้
ByteType, UTF8Type, LexicalUUIDType, TimeUUIDType, AsciiType, LongType การเรียงลำดับจะเรียงตาม Column.name และขึ้นอยู่กับชนิดข้อข้อมูลที่เรากำหนด
ตัวอย่างการ Config เช่น

ในกรณีของ SuperColumns เราสามารถใช้ attribute ที่ชื่อ CompareSubcolumnsWith เพื่อกำหนดชนิดข้อมูลเพื่อเรียงลำดับใน Column ที่อยู่ใน SuperColumn ได้
ตัวอย่างการ Config เช่น


ตัวอย่าง Column ถ้าเรามีข้อมูลตามนี้
{name: 123, value: "hello there"},
{name: 832416, value: "kjjkbcjkcbbd"},
{name: 3, value: "101010101010"},
{name: 976, value: "kjjkbcjkcbbd"}
แล้วกำหนด CompareWith เป็นชนิดข้อมูล LongType ข้อมูลใน ColumnFamily จะถูกเรียงดังนี้
{name: 3, value: "101010101010"},
{name: 123, value: "hello there"},
{name: 976, value: "kjjkbcjkcbbd"},
{name: 832416, value: "kjjkbcjkcbbd"}
แต่ถ้ากำหนด CompareWith เป็นชนิดข้อมูล UTF8Type ข้อมูลใน ColumnFamily จะถูกเรียงดังนี้
{name: 123, value: "hello there"},
{name: 3, value: "101010101010"},
{name: 832416, value: "kjjkbcjkcbbd"},
{name: 976, value: "kjjkbcjkcbbd"}
ตัวอย่าง SuperColumn ถ้าเรามีข้อมูลดังนี้
{
 name: "workAddress",  value: {   street: {name: "street", value: "1234 x street"},   city: {name: "city", value: "san francisco"},   zip: {name: "zip", value: "94107"}         } ,  {
name: "homeAddress",
 value: {   street: {name: "street", value: "1234 x street"},   city: {name: "city", value: "san francisco"},   zip: {name: "zip", value: "94107"}  } }
แล้วกำหนด CompareSubcolumnsWith & CompareWith เป็น UTF8Type จะได้ผลลัพธ์ดังนี้
{
 name: "homeAddress",  value: {   city: {name: "city", value: "san francisco"},  
street: {name: "street", value: "1234 x street"},
 zip: {name: "zip", value: "94107"}
}
,  {
name: "workAddress",
 value: {   city: {name: "city", value: "san francisco"},  
street: {name: "street", value: "1234 x street"},
 zip: {name: "zip", value: "94107"} }
}

No comments:

Post a Comment