well this seems to a problem of managing 50,000 Things object. I guess the simple solution will be to have a class containing hashmap or an array list based on your needs to store this "Things" object. and then make that class a singleton or a monostate which can access your Things obect in the way u want it. I don't think that you need any type of EJB for this.
I hope this helps
The question you really need to ask is do you actually need your 50,000 "things" in memory, or can u just load the "things" u need as and when u need them. 50,000 "things" is going to take a long time to load and a lot of memory however you do it.
One way as carpy1970 said is to load thing only when you really need to access its properties. About relations, another way of relations representation is connectedness matrix (M), things with numbers n1 and n2 are related when M(n1,n2) = 1 otherwise M(n1,n2) = 0, so this matrix has 50000*50000 cells, every cell is one bit, size of such matrix is about 312.5 Mb, it is a bit much, but it is the fast way to surf between graph leafs.