You don’t want to look through all the keys. That’s why Ignite has SQL.

> On 22 Mar 2023, at 14:44, Humphrey Lopez <hmmlo...@gmail.com> wrote:
> 
> We have FAT keys that contain information about the Values we store. 
> KEY
> - Object A
> - Object B
> 
> VALUE
> - Object Y
> 
> The KEY we are using contains several (small) objects as fields. We have 
> added to Object A a new field A.TYPE so when searching through the cache we 
> could filter on that type.
> I guess we will need to first get all the keys that match that A.TYPE and 
> then get the objects with those objects, I think looping through the keys 
> will be quicker than looping through all the values. 
> Maybe we can query/filter the keys in BinaryMode, and then get all 
> corresponding values? Just thinking out loud. We don't want to be 
> deserializing unnecessarily values (Object.Y). Maybe with QuerySqlFields on 
> the key?
> 
> Humphrey
> 
> Op wo 22 mrt 2023 om 15:18 schreef Rick Lee <eerick...@gmail.com 
> <mailto:eerick...@gmail.com>>:
>> 
>> Why don’t u put the type to value and leave the id as the key?
>> 「Humphrey Lopez <hmmlo...@gmail.com <mailto:hmmlo...@gmail.com>>」在 
>> 2023年3月22日 週三,下午10:16 寫道:
>>> Okay transient is also not the way to go, cause we want to be able to 
>>> filter sometimes on that field, so it should be there in the cache. But 
>>> thanks for clarifying that the Equals and HashCode is not being used on 
>>> BinaryObjects.
>>> 
>>> Op wo 22 mrt 2023 om 14:51 schreef Humphrey Lopez <hmmlo...@gmail.com 
>>> <mailto:hmmlo...@gmail.com>>:
>>>> I see marking the field as Transient Ignite won't serialize it to 
>>>> BinaryObject, is that the way to go?
>>>> 
>>>> Humphrey
>>>> 
>>>> Op wo 22 mrt 2023 om 14:37 schreef Humphrey Lopez <hmmlo...@gmail.com 
>>>> <mailto:hmmlo...@gmail.com>>:
>>>>> Thanks for clarifying that. Is there a way to mark a property/field to be 
>>>>> excluded when storing?
>>>>> 
>>>>> Humphrey
>>>>> 
>>>>> Op wo 22 mrt 2023 om 14:20 schreef Stephen Darlington 
>>>>> <stephen.darling...@gridgain.com 
>>>>> <mailto:stephen.darling...@gridgain.com>>:
>>>>>> Ignite doesn’t use your equals or hashCode implementation. Data is 
>>>>>> stored as a BinaryObject, and it’s that that is compared for equality.
>>>>>> 
>>>>>>> On 22 Mar 2023, at 12:14, Humphrey Lopez <hmmlo...@gmail.com 
>>>>>>> <mailto:hmmlo...@gmail.com>> wrote:
>>>>>>> 
>>>>>>> They are in the example only checking the first field when overriding 
>>>>>>> the equals. And hashCode always returns 1.
>>>>>>> 
>>>>>>> Op wo 22 mrt 2023 om 13:06 schreef Prigoreanu, Alexandru 
>>>>>>> <prigoreanu.alexan...@anteash.com 
>>>>>>> <mailto:prigoreanu.alexan...@anteash.com>>:
>>>>>>>> hashCode and equals should depend on the same fields.
>>>>>>>> 
>>>>>>>> On Wed, Mar 22, 2023 at 8:02 AM Humphrey Lopez <hmmlo...@gmail.com 
>>>>>>>> <mailto:hmmlo...@gmail.com>> wrote:
>>>>>>>>> Hello, when having a key which equals another key, when trying to 
>>>>>>>>> retrieve from cache it does not return the expected value. Is this a 
>>>>>>>>> bug?
>>>>>>>>> 
>>>>>>>>> I have a reproducible below in kotlin but in java we get the same 
>>>>>>>>> result (test with Ignite 2.10 and  2.14) and java 11 and 19.
>>>>>>>>> 
>>>>>>>>> import org.apache.ignite.Ignition
>>>>>>>>> import org.apache.ignite.configuration.CacheConfiguration
>>>>>>>>> import org.assertj.core.api.SoftAssertions
>>>>>>>>> import org.junit.jupiter.api.Test
>>>>>>>>> 
>>>>>>>>> class MyTest {
>>>>>>>>> 
>>>>>>>>>     private val key1 = MyKey("ABC", "DEF")
>>>>>>>>>     private val key2 = MyKey("ABC", "xxx")
>>>>>>>>> 
>>>>>>>>>     @Test
>>>>>>>>>     fun testEquals() {
>>>>>>>>>         SoftAssertions.assertSoftly {
>>>>>>>>>             it.assertThat(key1).isEqualTo(key2)
>>>>>>>>>             it.assertThat(key1 == key2).isTrue
>>>>>>>>>         }
>>>>>>>>>     }
>>>>>>>>> 
>>>>>>>>>     @Test
>>>>>>>>>     fun testWithMap() {
>>>>>>>>>         val map = mapOf(Pair(key1, "key1"))
>>>>>>>>> 
>>>>>>>>>         SoftAssertions.assertSoftly {
>>>>>>>>>             it.assertThat(map.containsKey(key1)).isTrue
>>>>>>>>>             it.assertThat(map.containsKey(key2)).isTrue
>>>>>>>>>         }
>>>>>>>>> 
>>>>>>>>>     }
>>>>>>>>> 
>>>>>>>>>     @Test
>>>>>>>>>     fun testWithIgnite() {
>>>>>>>>>         val ignite = Ignition.start();
>>>>>>>>>         val cache = ignite.createCache(CacheConfiguration<MyKey, 
>>>>>>>>> String>("mycache"))
>>>>>>>>> 
>>>>>>>>>         cache.put(key1, "key1")
>>>>>>>>>         SoftAssertions.assertSoftly {
>>>>>>>>>             it.assertThat(cache.containsKey(key1)).isTrue
>>>>>>>>>             it.assertThat(cache.containsKey(key2)).isTrue
>>>>>>>>>         }
>>>>>>>>>     }
>>>>>>>>> 
>>>>>>>>>     private data class MyKey(val id: String, val type: String) {
>>>>>>>>>         override fun equals(other: Any?): Boolean {
>>>>>>>>>             if (other is MyKey)
>>>>>>>>>                 return id == other.id
>>>>>>>>>             return false
>>>>>>>>>         }
>>>>>>>>> 
>>>>>>>>>         override fun hashCode(): Int {
>>>>>>>>>             return 1
>>>>>>>>>         }
>>>>>>>>>     }
>>>>>>>>> }
>>>>>> 

Reply via email to