How to optimize a data allocation in the distributed database?

Are there any software products for solving this problem?

For example:

There are some number of connected servers for the distributed database. Each server simultaneously is a client of this database.

The database has many tables.

We have statistic of queries from each client to the particular table.

There is some price of the data storage for each server. There is some price of transfer, known for each pair of the server and the client.

Objective: To allocate all tables (or parts of tables) on servers in the best possible way.

To solve this problem we can apply a variety of heuristic algorithms: genetic algorithms, evolution strategies, ant algorithms, etc.

But I could not find any ready software tools that would have implemented these algorithms.

Are there any tools to solve this problem for distributed databases (Oracle or others)?

Does anybody care about it?

And maybe somebody has examples of systems with a query statistic with the distributed database that have been optimized in this way?