如何通过BeisenCloud索引存储

常见概念

Beisen.MultiTenant.CoreV3

Beisen.MultiTenant.CoreV3是BeisenCloud封装提供的用于对基于BeisenCloud中应用下的业务实体的数据存储和索引的类库。

关键知识

Cassandra

Cassandra是一套开源分布式NoSQL数据库系统。BeisenCloud中产生的业务对象数据全部存储在Cassandra中。

经验技巧

ObjectData对象的ObjectID原则上是GUID保持全局唯一,他是我们从Cassandra和Elasticsearch查询到数据段一个关联主键,同时存在于Cassandra和Elasticsearch中都可以用于标识唯一的一条数据**

技术内幕

Beisen.MultiTenant.CoreV3实际上是对Cassandra客户端和elasticsearch的封装,它根据你在BeisenCloud中定义的应用业务对象实体描述,在对象数据存储的时候同时帮你创建了与之对应的索引结构,这样就方便了业务发开工程师不用过度的去关心,我什么时候该存储数据什么时候又该去存储索引,该如何去存储这些什么完全透明化。

注意事项

出于对基础服务稳定性的考量,为了避免不同的业务线在使用基础服务时不因为一些错误的代码引起基础服务的瘫痪导致所有产品线受到影响,平台对基础服务的使用增加了一些额外的限制,针对Beisen.MultiTenant.CoreV3中的数据存储接口:

  1. 单次批量获取不能超过100条数据
  2. 单词批量获取再不超过100条数据的前提下,所有数据对象属性总和不能超过10000个字段。

以上限制均会在运行时引起程序异常,所以大家在使用时尽量避免。

实例

1.为你的项目创建ApplicantProfile实体模

public class ApplicantProfile
    {
        public string Name { get; set; }

        public string Email { get; set; }


        public string Phone { get; set; }

        public int Age { get; set; }


        public int Gender { get; set; }

    }

2.封装存储方法

public void Save(ApplicantProfile applicantProfile)
        {
            //获取ApplicantProfile在beisencloud中定义好的模型元数据
            var applicantMetaData = MetaDataProvider.Instance.GetObjectMeta("Recruitment.ApplicantProfile", 100100);
            //将本地ApplicantProlie对象属性一一映射进接口参数模型中
            var applicantObjectData = new ObjectData(applicantMetaData);
            applicantObjectData.ObjectID = Guid.NewGuid().ToString();
            applicantObjectData["Name"] = applicantProfile.Name;
            applicantObjectData["Email"] = applicantProfile.Email;
            applicantObjectData["Phone"] = applicantProfile.Phone;
            applicantObjectData["Age"] = applicantProfile.Age;
            applicantObjectData["Gender"] = applicantProfile.Gender;
            //只存储cassandra接口不创建索引
            DataContext.Instance.AddWithoutIndex(applicantMetaData, new List() { applicantObjectData });
            //同时存储cassandra和创建索引接口
            DataContext.Instance.Add(applicantMetaData, new List() { applicantObjectData });
        }