我有一个有3个状态的传奇 -如何确保与MassTransit佐贺,增加了一个项目,以良好的性能NHibernate的持久化的IList
public static State Initial { get; set; }
public static State ReceivingRows { get; set; }
public static State Completed { get; set; }
它从初始转换到ReceivingRows当它到达一个BofMessage(其中Bof =文件开始)。在BofMessage之后,它接收大量的RowMessages,每个RowMessage描述一个平面文件中的一行。一旦发送了所有RowMessages,就会发送一个EofMessage,并且状态更改为Completed。观察 -
static void DefineSagaBehavior()
{
Initially(When(ReceivedBof)
.Then((saga, message) => saga.BeginFile(message))
.TransitionTo(ReceivingRows));
During(ReceivingRows, When(ReceivedRow)
.Then((saga, message) => saga.AddRow(message)));
During(ReceivingRows, When(ReceivedRowError)
.Then((saga, message) => saga.RowError(message)));
During(ReceivingRows, When(ReceivedEof)
.Then((saga, message) => saga.EndFile(message))
.TransitionTo(Completed));
}
public override void OnAddRow(ParcelRowMessage message)
{
// ensure isCauvReturned is "Y"
var fields = message.Value;
var isCauvReturned = fields[33] == "Y";
if (!isCauvReturned)
return;
// add row with just parcel number
var parcelNumber = fields[1];
var row = parcelNumber;
_rows.Add(row);
}
这个工作除了它有n平方的表现。与NHProf调查揭示,每行加导致的行的整个列表为:
A)从重新插入到数据库中的数据库
C)中删除的数据库
B)中选择。
这似乎是非常不好的行为给我。只需要添加一行就可以......将一行添加到数据库中!字面上,添加操作是我使用行列表进行的唯一操作。当我们在列表中有10,000个项目时,这不会缩放。
有谁知道如何给这个传奇更理智的表现行为?
BTW - 这里的IList的是如何映射,如果你需要它 -
HasMany(x => x.Rows)
.Table("OwnerHistorySagaRow")
.KeyColumn("CorrelationId")
.Element("Row")
.Cascade.AllDeleteOrphan();
谢谢!
我研究这个,但恐怕它并没有给我足够的细节去。你能给出更具体的答案吗? –