我需要建立一个全球域名的索引数据库。
示例:
domain1.com ips: 1.1.1.1,2.2.2.2,3.3.3.3
domain2.com ips: 1.1.1.1,4.4.4.4
要求:
快速插入
快速“选择”
ip的索引 - 需要对IP上的所有域快速“选择”:1.1.1.1。
我在Berkley-DB中构建它,看起来很好: (请注意“MANY_TO_MANY”注释)
@Entity
公共静态类DomainInfo {
@PrimaryKey String domain; @SecondaryKey(relate=MANY_TO_MANY) Set<String> IP = new HashSet<String>();
}
我可以在Cassandra中构建类似的东西吗?
非常感谢!!!
答案 0 :(得分:2)
是的,它可能。您将使用Cassandra免费快速插入。 快速“选择”?只要您使用合理的索引构造适当的列族,就可以快速“选择”。
ips索引。好的,只需为该索引创建第二列族。或者等待即将到来的0.7版本(rc即将发布,betas可用。)并使用内置支持二级索引。
答案 1 :(得分:1)
您可以使用这两个列系列构建查找模型作为示例:
DomainLookup = { 'domain1.com' : { 'ips' : '1.1.1.1,2.2.2.2,3.3.3.3' } 'domain2.com' : { 'ips' : '1.1.1.1,4.4.4.4' } } ReverseLookup = { '1.1.1.1' : { 'domains' : 'domain1.com,domain2.com } '2.2.2.2' : { 'domains' : 'domain1.com' } '3.3.3.3' : { 'domains' : 'domain1.com' } '4.4.4.4' : { 'domains' : 'domain2.com' } }
此示例可能不适合您的情况。但请记住,Cassandra已针对写入进行了优化。因此,您可以创建最适合您的查询方案的其他索引。此外,Cassandra采用Dynamo的完全分布式设计,使其更容易扩展。它是自我管理的,这意味着您可以向Cassandra云添加新计算机,它将自动平衡存储和负载。您需要注意的一件事是选择随机或订单保留分区。