我对具有高记录数的类的查询性能很差。我正在运行一些非常简单的查询,但性能无法使用。我非常喜欢orientdb,这是我的第五个开发项目,其中odb作为后端。但是,这个特殊的项目迫使我寻找替代方案。
请参阅下面的详细说明。
我们有一个Parent
类没有增长太多,整个数据集大约有900条记录。
然而,Child
类在15分钟内以10万条记录的速度增长。它每天都会产生数百万条记录。
将记录作为父级的更新/添加插入子类。
create class Parent extends V
create class Child
家长数据模型
{
"id": string,
"name": string,
"rank": integer,
"price_usd": float,
"price_cny": float,
"volume_24h_usd": float
"market_cap_usd": float,
"available_supply": integer,
"total_supply": integer,
"last_updated": datetime,
"MarketName": string,
"Exchange": string,
"last_refresh": datetime
}
子数据模型
{
"MarketName": string,
"High": float,
"Low": float,
"Volume": float,
"Last": float,
"Bid": float,
"Ask": float,
"BaseVolume": float,
"TimeStamp": datetime
}
父数据样本
{
"@type": "d",
"@rid": "#506:403225",
"@version": 1,
"@class": "Parent",
"MarketName": "USD-CNY",
"High": 0.00026815,
"Low": 0.00023002,
"Volume": 17005.93615271,
"Last": 0.00026103,
"Bid": 0.00026104,
"Ask": 0.000265,
"BaseVolume": 4.15293493,
"TimeStamp": "2017-07-15T18:28:11.857",
"@fieldTypes": "High=d,Low=d,Volume=d,Last=d,Bid=d,Ask=d,BaseVolume=d"
}
儿童记录插入
Update Parent add Child = [
{
"@type":"d",
"@class":"Child",
"MarketName":"USD-CNY",
"High":0.000083,
"Low":0.00006815,
"Volume":18688741.88795826,
"Last":0.00006857,
"Bid":0.00006857,
"Ask":0.00006889,
"BaseVolume":1412.08213181,
"TimeStamp":"2017-07-19T17:12:59.44"
}
] where MarketName = "USD-CNY"
以下查询的效果不佳
select
MarketName,
Last,
Bid,
Ask,
High,
Low,
BaseVolume,
TimeStamp,
TimeStamp.asDateTime().format('yyyy-MM-dd') as date,
TimeStamp.asDateTime().format('hh:mm:ss') as time,
if(eval('TimeStamp.asDateTime().format("hh") between 0 and 11'),'PM','AM') as hour12
from Child where MarketName = "USD-CNY" order by TimeStamp desc
其他信息。
在Child类中,我们有大约900万条记录WHERE MarketName = "USD-CNY"
执行此查询大约需要33到40秒。
我没有对父类或子类进行任何索引,需要一些关于多模型数据库的正确索引技术的指导。
此外,我不期待900万条记录的回应。我可以将结果分页并获得前100名。
感谢任何指导。
答案 0 :(得分:0)
与任何其他DBMS一样,OrientDB需要在您用作过滤器的属性上使用索引。尝试执行此操作:
CREATE INDEX Child.MarketName ON Chile( market name ) UNIQUE
您将看到您的查询现在应该<300毫秒。
有关详细信息,请查看https://orientdb.com/docs/2.2/SQL-Create-Index.html。
答案 1 :(得分:0)
我试试这个: CREATE INDEX Child_Market_Time_idx ON Child(Marketname,TimeStamp)UNIQUE;