我目前正在为数据的统一进行开发工作。
我注意到协调的完成很慢。
我对NoSQL / MarkLogic开发是相对较新的,不确定如何遵循最佳实践以实现平稳,更快的协调。
以下是一些事实:
数据加载:
帖子协调:
协调代码段:
function getScheduleWindowEnd(businessUnit,targetDateString,schEndDateString)
{
var scheduleWindowEnd = new String();
var preferredDate = new Date();
var startDayOfWeek = getBUStartDayOfWeek(businessUnit);
if (fn.empty(targetDateString) || targetDateString == null || targetDateString == "" ||
fn.empty(schEndDateString) || schEndDateString == null || schEndDateString == "")
{
tempScheduleWindowEnd = "";
return "";
}
else
{
targetDateString = fn.replace(targetDateString, "/", "-") ;
schEndDateString = fn.replace(schEndDateString,"/","-");
var targetDate = xs.date(targetDateString);
var schEndDate = xs.date(schEndDateString);
// Get preferred date
if (fn.empty(schEndDate))
{
preferredDate = targetDate;
}
else
{
preferredDate = schEndDate;
}
//get target day of week
var scheduledDayOfWeek = xdmp.weekdayFromDate(preferredDate);
if (scheduledDayOfWeek < startDayOfWeek)
{
scheduleWindowEnd = fn.string(addDays(preferredDate,(startDayOfWeek-scheduledDayOfWeek)));
}
else
{
scheduleWindowEnd = fn.string(addDays(preferredDate,(startDayOfWeek-scheduledDayOfWeek+7)));
}
scheduleWindowEnd = fn.replace(fn.substring(scheduleWindowEnd, 1, 10), "-", "/");
tempScheduleWindowEnd = scheduleWindowEnd;
}
return scheduleWindowEnd
}
<StatusDescription>${fn.normalizeSpace(getUDCDescription("00", "SS", fn.normalizeSpace(hl.elementText(source, "WASRST", true))))}</StatusDescription>
function getUDCDescription(drsy,drrt,drky) {
let udcRecord = cts.search(cts.andQuery([
cts.collectionQuery("ERPSystemSource"),
cts.collectionQuery("Table2"),
cts.elementWordQuery(xs.QName("DRSY"), drsy),
cts.elementWordQuery(xs.QName("DRRT"), drrt),
cts.elementWordQuery(xs.QName("DRKY"), drky)
]))
let docXML = new String();
for (const item of udcRecord) {
docXML += hl.encodeXml(fn.normalizeSpace(hl.elementText(item, "DRDL01", true)))
}
return docXML;
}
<Element1>${hl.elementText(source, "WADOCO", true)}</Element1>
<Element2>${fn.normalizeSpace(hl.elementText(source, "WAMCU", true))}</Element2>
答案 0 :(得分:2)
如果可能的话,我强烈建议您考虑与MarkLogic代表合作解决此问题。改善软件性能可能很复杂,最好与可以与您往返的人保持工作关系。
我经常问的第一个问题是:那么,您期望的SLA是多少?除非您对性能的期望有清晰的预期,否则我无法告诉您这是缓慢还是快速,或者您的期望是现实的还是不现实的。
根据我的经验,性能问题通常属于以下两类之一:软件或基础架构瓶颈。由于从20万条记录到100万条记录的时间推断似乎是线性的,所以我希望您的瓶颈不是严重的软件问题。
我要做的第一件事是检查MarkLogic监视历史记录,并确定您是否在充分利用基础架构。如果没有,请尝试增加协调工作负载的线程数和批处理大小,以便充分利用基础架构。
如果您充分利用基础架构,则可以升级基础架构,也可以开始着手改善软件。
根据您的代码,以下是一些您可以用来改进软件的建议:
答案 1 :(得分:0)
除了Rob的建议外,您可能还想检查协调中的收集器步骤。看起来您正在将多个记录折叠到一个实体实例中,并且如果不迭代所有记录,效果最好。重复记录uris是默认的收集器实现。您可能要用正在创建的实体的某些唯一ID上的cts.values替换它。
如果您确实要遍历uri,则可能是您重新创建同一实体实例的次数与该实体实例所包含的记录一样多,这将浪费大量时间。您可以通过从干净的数据库中运行协调来查看您的最终数据库是否包含大量已删除的片段,从而进行检查。
HTH!