Hi Luigi,

Thanks. The performance issue solved immediately. I didn't know that is 
case sensitive.

On Friday, January 30, 2015 at 6:20:22 PM UTC+8, Luigi Dell'Aquila wrote:
>
> Hi Siang,
>
> I got the point, it seems there is an issue related to property case 
> sensitivity.
> You are executing the query with "salary >= 1000..." (lowercase) but you 
> are setting property value with  .Set("Salary", employee.Salary) (first 
> letter uppercase).
>
> Could you try to normalize attribute names and try it again? Attribute 
> names are not supposed to be case sensitive, but apparently the query 
> optimizer is failing to recognize them in this case.
>
> Luigi
>
>
>
>
> 2015-01-30 10:51 GMT+01:00 Siang Hwee Goh <[email protected] 
> <javascript:>>:
>
>> Hi Luigi,
>>
>> Would you mind elaborating what kind of small test case you refer to? Do 
>> you mean sample source code to produce it? I just have a very simple class 
>> with few properties shown below. I just insert it with 1.2 million loop and 
>> the code as follow. Then I go to the web interface and type the SELECT 
>> command. It is very fast if I only filter 1 record. however, it is slow and 
>> keep prompting me more than 50,000 records kind of message and asked me to 
>> do indexing. Even though the select criteria shall only return 1 result.
>>
>> public static void TestOrientDB()
>>         {
>>             var GlobalTestDatabaseName = "TestDatabaseName";
>>             var GlobalTestDatabaseType = ODatabaseType.Graph;
>>             var GlobalTestDatabaseAlias = "TestDatabaseNameAlias";
>>             
>>             _server = new OServer(_hostname, _port, _rootUserName, 
>> _rootUserParssword);
>>                OClient.CreateDatabasePool(
>>                 _hostname,
>>                 _port,
>>                 GlobalTestDatabaseName,
>>                 GlobalTestDatabaseType,
>>                 _username,
>>                 _password,
>>                 10,
>>                 GlobalTestDatabaseAlias
>>             );
>>             DateTime startTime = DateTime.Now;
>>             Console.WriteLine("Start Time: " + 
>> startTime.ToLongTimeString());
>>
>>             using (ODatabase database = new 
>> ODatabase("TestDatabaseNameAlias"))
>>             {
>>
>>                 for (int count = 1; count <= 1000000; count++)
>>                 {
>>                     var employee = new Employee();
>>                     employee.Id = "1234567890123456789012345678901234";
>>                     employee.Key = "1234567";
>>                     employee.Revision = "1234567";
>>                     employee.Name = "Mohamad Abu 
>> Bakar123456789012345678911234dddddd";
>>                     employee.IcNumber = "1234567-12-3444";
>>                     employee.Department = "IT Department";
>>                     employee.Height = 1234;
>>                     employee.DateOfBirth = new DateTime(2015, 1, 27, 3, 
>> 33, 3);
>>                     employee.Salary = (decimal)3333.123456789 + (count * 
>> 10);
>>
>>                     database.Insert().Into("Employee").Set("Id", 
>> employee.Id)
>>                                 .Set("Key", employee.Key)
>>                                 .Set("Revision", employee.Revision)
>>                                 .Set("Name", employee.Name)
>>                                 .Set("IcNumber", employee.IcNumber)
>>                                 .Set("Department", employee.Department)
>>                                 .Set("Height", employee.Height)
>>                                 .Set("DateOfBirth", employee.DateOfBirth)
>>                                 .Set("Salary", employee.Salary).Run();
>>                     
>>
>>
>>                 }
>>             }
>>
>>             
>>
>>             DateTime endTime = DateTime.Now;
>>             TimeSpan duration = endTime - startTime;
>>             Console.WriteLine("End Time: " + endTime.ToLongTimeString());
>>             Console.WriteLine("Total time taken: " + 
>> duration.TotalSeconds);
>>         }
>>
>>
>>  public class Employee 
>>     {
>>         public string Id { get; set; }
>>
>>         public string Key { get; set; }
>>
>>         public string Revision { get; set; }
>>
>>
>>         public string Name { get; set; }
>>
>>         public string IcNumber { get; set; }
>>
>>         public string Email { get; set; }
>>
>>         public string Department { get; set; }
>>         public double Height { get; set; }
>>
>>         public DateTime DateOfBirth { get; set; }
>>
>>         public decimal Salary { get; set; }
>>     }
>>
>> On Friday, January 30, 2015 at 5:31:29 PM UTC+8, Luigi Dell'Aquila wrote:
>>>
>>> Hi Siang,
>>>
>>> all hash indexes do not support range queries (they are based on hash of 
>>> course, not on a tree).
>>> But standard NOT_UNIQUE should, so if it doesn't work I suggest you to 
>>> write a small test case or all the steps to replicate the problem, we'll be 
>>> happy to look at that.
>>>
>>> Thanks
>>>
>>>
>>>
>>> 2015-01-30 9:55 GMT+01:00 Siang Hwee Goh <[email protected]>:
>>>
>>>> Hi Luigi,
>>>>
>>>> I have tried on NOT_UNIQUE and NOT_UNIQUE_HASH_INDEX. Both also not 
>>>> working. Based on my understanding from https://github.com/
>>>> orientechnologies/orientdb/wiki/Indexes, I thought that will be the 
>>>> most fit at my scenario. Do you have any suggestion? Thanks. 
>>>>
>>>> On Friday, January 30, 2015 at 4:43:25 PM UTC+8, Luigi Dell'Aquila 
>>>> wrote:
>>>>>
>>>>> Hi Siang,
>>>>>
>>>>> which kind of index did you define? Not all types of index support 
>>>>> range queries
>>>>>
>>>>> Luigi
>>>>>
>>>>>
>>>>> 2015-01-30 9:05 GMT+01:00 Siang Hwee Goh <[email protected]>:
>>>>>
>>>>>> I am evaluating OrientDB right now and I tried to inserts 1.2 million 
>>>>>> simple records inside one of the database. It is an Employee class with 
>>>>>> just few columns. 
>>>>>>
>>>>>> When I tried to perform the query on SELECT * FROM Employee WHERE 
>>>>>> salary = 1343 it was very slow and ended up no result being returned. I 
>>>>>> did 
>>>>>> some indexing and now it became very fast. 
>>>>>> However, when I tried to again change the query a little bit to this 
>>>>>> SELECT * FROM Employee WHERE salary >= 3330 AND salary <= 3330 it ended 
>>>>>> up 
>>>>>> return nothing again and prompted me the transactions is more than 
>>>>>> 50,000 
>>>>>> records and ... As a matter of fact, there is only 1 record inside which 
>>>>>> fulfill this search criteria. Could anyone let me know how to tune the 
>>>>>> performance in such case? Thanks.
>>>>>>
>>>>>> -- 
>>>>>>
>>>>>> --- 
>>>>>> You received this message because you are subscribed to the Google 
>>>>>> Groups "OrientDB" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it, 
>>>>>> send an email to [email protected].
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>>
>>>>>  -- 
>>>>
>>>> --- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "OrientDB" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to [email protected].
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>  -- 
>>
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "OrientDB" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to