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 >>>>>>>>> } >>>>>>>>> } >>>>>>>>> } >>>>>>