There are some objects, in relation to one to many (for simplify). 
For example, there is a list with field descriptions (field type, range of
possible values, etc.) and items of this list.
It is necessary to somehow fold item correctly into the cache and get it
from there when filtering on the server. Filtering can be quite complex and
only one item is insufficient. We need info from list too.
It is necessary somehow to have access to the list (and to other objects
too).
If you write item and using WriteObject <T> for list, then the whole list
object is written. For example, for 10,000 items, we will write 10,000 times
the list object that we need in only one instance. I should be able to read
another element from one element. On the client side, there is a link to
Ignite and there we can access the cache and get everything we need.
 
And here's how to do this on the server in the filter ???


Есть у на объекты, можно сказать в отношении один ко многим. На самом деле
немного сложнее, но пока можно так считать.
Например есть некий список с описаниями полей (тип поля, диапазон возможных
значений и т.д.)
И есть собственно сами элементы списка , которые имеют ссылку на этот список
(метаинформацию).
Нужно как-то сложить правильно это в кэш и достать оттуда при ФИЛЬТРАЦИИ НА
СЕРВЕРЕ. Фильтрация может быть довольно сложной и данных только одного
элемента недостаточно.
Нужно как-то иметь доступ к списку (и к другим объектам тоже).
Если писать WriteObject<T>, то тогда пишется весь объект. Например для 10000
элементов мы запишем 10000 раз объект списка который нам нужен только в
одном экземпляре. Фактически список это сложный объект в котором много
данных и для каждого элемента их писать как-то странно. К тому-же нужны
перекрестные ссылки на объекты. Т.е. я из одного элемента должен иметь
возможность прочитать другой элемент. На клиентской стороне есть ссылка на
Ignite и там мы можем обратиться к кэшу и достать все что нужно. 
 
А вот как на сервере в фильтре это сделать???
 
   public class TestItem:IBinarizable
    {
        public string TestData { get; set; }
 
        public TestList List { get; set; }
 
        #region Implementation of IBinarizable
 
        public void WriteBinary(IBinaryWriter writer)
        {
            writer.WriteString(nameof(TestData), TestData);
            //how to write List on server part?
        }
 
        public void ReadBinary(IBinaryReader reader)
        {
            TestData = reader.ReadString(nameof(TestData));
            //how to read List on server part?
        }
 
        #endregion
    }
 
 
    public class TestList:IBinarizable
    {
        public string Fields { get; set; }
 
        #region Implementation of IBinarizable
 
        public void WriteBinary(IBinaryWriter writer)
        {
            writer.WriteString(nameof(Fields), Fields);
        }
 
        public void ReadBinary(IBinaryReader reader)
        {
            Fields = reader.ReadString(nameof(Fields));
        }
 
        #endregion
    }
 
 
    public class TestItemFilter : ICacheEntryFilter<int, TestItem>
    {
        #region Implementation of ICacheEntryFilter<in int,in TestItem>
 
        public bool Invoke(ICacheEntry<int, TestItem> entry)
        {
            //We need check List property of TestItem for filter. How?
            // entry.Value.List is null
            return entry.Value.List.Fields == "test";
        }
 
        #endregion
    }




--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/

Reply via email to