C# couchbase中的更新
我需要一些使用couchbase更新的帮助。我的页面中有一个任务。如果用户单击like,那么like计数应该在我的couchbase bucket中更新。我已经尝试了我自己的更新处理程序代码,但有一些时间延迟。我在下面也包含了我的更新代码 这是我喜欢任务的代码C# couchbase中的更新,c#,nosql,couchbase,updating,C#,Nosql,Couchbase,Updating,我需要一些使用couchbase更新的帮助。我的页面中有一个任务。如果用户单击like,那么like计数应该在我的couchbase bucket中更新。我已经尝试了我自己的更新处理程序代码,但有一些时间延迟。我在下面也包含了我的更新代码 这是我喜欢任务的代码 public ResponseVO LikeTask(LikeVO likeVO) { ResponseVO response = new ResponseVO(); tr
public ResponseVO LikeTask(LikeVO likeVO)
{
ResponseVO response = new ResponseVO();
try
{
if (!isLiked(likeVO.TaskID, likeVO.UserID))
{
UpdateTaskDB likeUpdate = new UpdateTaskDB();
UpdateTaskVO updatetaskvo = new UpdateTaskVO();
updatetaskvo.FieldName = "Likes";
LikeVO tempvo = new LikeVO();
tempvo.LikedOn = DateTime.Now.ToString();
tempvo.UserID = likeVO.UserID;
tempvo.UserName = likeVO.UserName;
tempvo.TaskID = likeVO.TaskID;
updatetaskvo.ObjectValue = tempvo;
updatetaskvo.TaskID = likeVO.TaskID;
likeUpdate.UpdateDocument(updatetaskvo);
}
response.StatusMessage = "Liked Successfully";
}
catch (Exception ex)
{
response.StatusCode = "0";
response.StatusMessage = ex.Message;
}
return response;
}
我自己的更新处理程序代码:
public class UpdateTaskDB
{
CouchbaseClient oCouchbase;
public UpdateTaskDB()
{
oCouchbase = new CouchbaseClient("vwspace", "");
}
public TaskVO GetTaskByID(string task_id)
{
TaskVO results = null;
try
{
String str1;
str1 = (String)oCouchbase.Get(task_id);
results = JsonConvert.DeserializeObject<TaskVO>(str1);
}
catch (Exception ex)
{
}
return results;
}
public void UpdateDocument(UpdateTaskVO inputParams)
{
try
{
var client = new CouchbaseClient("vwspace", "");
TaskVO taskDoc = GetTaskByID(inputParams.TaskID);
switch (inputParams.FieldName)
{
case "Likes":
List<LikeVO> docLikes = taskDoc.likes;
docLikes.Add((LikeVO)inputParams.ObjectValue);
taskDoc.likes = docLikes;
break;
case "UnLike":
LikeVO unlikevo = (LikeVO)inputParams.ObjectValue;
for (int count = 0; count < taskDoc.likes.Count; count++)
{
if (taskDoc.likes[count].UserID.Equals(unlikevo.UserID))
{
unlikevo = taskDoc.likes[count];
break;
}
}
taskDoc.likes.Remove(unlikevo);
break;
default:
break;
}
String json = JsonConvert.SerializeObject(taskDoc);
client.Store(StoreMode.Set, inputParams.TaskID, json);
}
catch (Exception ex)
{
Console.Write("Exception :" + ex.Message);
}
}
}
公共类UpdateTaskDB
{
couchbase客户机ocuchbase;
公共UpdateTaskDB()
{
ococuchbase=newcouchbaseclient(“vwspace”和“”);
}
public TaskVO GetTaskByID(字符串任务\u id)
{
TaskVO结果=null;
尝试
{
字符串str1;
str1=(字符串)ocuchbase.Get(任务id);
结果=JsonConvert.DeserializeObject(str1);
}
捕获(例外情况除外)
{
}
返回结果;
}
公共void UpdateDocument(UpdateTaskVO inputParams)
{
尝试
{
var client=newcouchbaseclient(“vwspace”和“”);
TaskVO taskDoc=GetTaskByID(inputParams.TaskID);
开关(inputParams.FieldName)
{
案例“喜欢”:
List docLikes=taskDoc.likes;
添加((LikeVO)inputParams.ObjectValue);
taskDoc.likes=docLikes;
打破
案例“不同”:
LikeVO unlikevo=(LikeVO)inputParams.ObjectValue;
对于(int count=0;count
在couchbase中还有其他方法处理此更新吗?请帮助我解决问题。您看到的延迟可能是因为您为每次单击创建了两个CouchbaseClient实例。创建CouchbaseClient实例是一项昂贵的操作,因为需要进行引导和配置设置 有两种不同的方法可以用来最小化创建CouchbaseClient实例的频率。一种方法是创建一个静态客户端,供数据访问类重用。web应用程序的另一种方法是将实例与HttpApplication实例关联。有关Web方法的示例,请参见下面我在GitHub上的(不完整的)示例项目 此外,我建议在更新文档的like计数时使用CAS操作。您希望确保“喜欢”投票不会导致整个文档从过时读取更新 例如:
public TaskVO GetTaskByID(string task_id)
{
var getResult = oCouchbase.ExecuteGet<string>(task_id);
var results = JsonConvert.DeserializeObject<TaskVO>(str1.Value);
results.Cas = getResult.Cas; //Here I'm suggesting adding a Cas property to your TaskVO
return results;
}
您看到的延迟可能是由于您正在为每次单击创建两个CouchbaseClient实例。创建CouchbaseClient实例是一项昂贵的操作,因为需要进行引导和配置设置 有两种不同的方法可以用来最小化创建CouchbaseClient实例的频率。一种方法是创建一个静态客户端,供数据访问类重用。web应用程序的另一种方法是将实例与HttpApplication实例关联。有关Web方法的示例,请参见下面我在GitHub上的(不完整的)示例项目 此外,我建议在更新文档的like计数时使用CAS操作。您希望确保“喜欢”投票不会导致整个文档从过时读取更新 例如:
public TaskVO GetTaskByID(string task_id)
{
var getResult = oCouchbase.ExecuteGet<string>(task_id);
var results = JsonConvert.DeserializeObject<TaskVO>(str1.Value);
results.Cas = getResult.Cas; //Here I'm suggesting adding a Cas property to your TaskVO
return results;
}
results.Cas=getResult.Cas;这里这个results.Cas是不可访问的,因为它被强制转换为…正确-我在代码片段中有一个注释,建议您必须添加一个Cas属性或一些其他机制(可能是out参数或元组?)来传递Cas。results.Cas=getResult.Cas;这里是结果。Cas不可访问,因为它被强制转换为…正确-我在代码段中有一条注释,建议您必须添加Cas属性或其他机制(可能是out参数或元组?)来传递Cas。