Search Results

Search found 31421 results on 1257 pages for 'software performance'.

Page 645/1257 | < Previous Page | 641 642 643 644 645 646 647 648 649 650 651 652  | Next Page >

  • What is the best way to work with large databases in Java depending on context?

    - by user19000
    We are trying to figure out the best practice for working with very large DBs in Java. What we do is a kind of BI (business Intelligence), i.e analyzing very large DBs, and using them to create intermediate DBs that represent intelligent knowledge of the DBs. We are currently using JDBC, and just preforming queries using a ResultSet. As more and more data is being created, we are wondering whether more appropriate ways exist for parsing and manipulating these large DBs: We need to support 'chunk' manipulation and not an entire DB at once(e.g. limit in JDBC, very poor performance) We do not need to be constantly connected since we are just pulling results and creating new tables of our own. We want to understand JDBC alternatives, with respect to advantages and disadvantages. Whether you think JDBC is the way to go or not, what are the best practices to go by depending on context (e.g. for large DBs queried in chunks)?

    Read the article

  • HTTP Session Invalidation in Servlet/GlassFish

    - by reza_rahman
    HTTP session invalidation is something most of us take for granted and don't think much about. However for security and performance sensitive applications it is helpful to have at least a basic understanding of how it works in Servlets. In a brief code centric blog post Servlet specification lead Shing Wai Chan introduces the APIs for session invalidation and explains how you can fine tune the underlying reaper thread for session invalidation when it is needed in GlassFish 4. Don't hesitate to post a question here if the blog is not clear, this is a relatively esoteric topic...

    Read the article

  • Getting Started Quickly

    - by Owen Allen
    If you're interested in using Ops Center, you'll want to get up and running as quickly and effectively as possible. One way to do this would be to work your way through the documentation library - use the Linux or Oracle Solaris install guides, then go through the Feature Guide and Admin Guide to start using the software. They're thorough, but they're a lot of reading. But if you're looking to install a simple deployment quickly, and you don't want to do all of the configuration work right off the bat, you can use the Quick Start Guide. It's a streamlined procedure that runs you through installing a single Enterprise Controller and co-located Proxy Controller, and then shows you how to discover assets quickly. Once you've discovered these assets, it describes how to use the analytics feature to view their performance, and use monitoring to keep track of their statuses and health. You'll have to do some additional configuration to use features like OS provisioning, OS updates, and virtualization, but the Quick Start guide gives you an overview of how to install and start using features quickly.

    Read the article

  • Efficient Way to Draw Grids in XNA

    - by sm81095
    So I am working on a game right now, using Monogame as my framework, and it has come time to render my world. My world is made up of a grid (think Terraria but top-down instead of from the side), and it has multiple layers of grids in a single world. Knowing how inefficient it is to call SpriteBatch.Draw() a lot of times, I tried to implement a system where the tile would only be drawn if it wasn't hidden by the layers above it. The problem is, I'm getting worse performance by checking if it's hidden than when I just let everything draw even if it's not visible. So my question is: how to I efficiently check if a tile is hidden to cut down on the draw() calls? Here is my draw code for a single layer, drawing floors, and then the tiles (which act like walls): public void Draw(GameTime gameTime) { int drawAmt = 0; int width = Tile.TILE_DIM; int startX = (int)_parent.XOffset; int startY = (int)_parent.YOffset; //Gets the starting tiles and the dimensions to draw tiles, so only onscreen tiles are drawn, allowing for the drawing of large worlds int tileDrawWidth = ((CIGame.Instance.Graphics.PreferredBackBufferWidth / width) + 4); int tileDrawHeight = ((CIGame.Instance.Graphics.PreferredBackBufferHeight / width) + 4); int tileStartX = (int)MathHelper.Clamp((-startX / width) - 2, 0, this.Width); int tileStartY = (int)MathHelper.Clamp((-startY / width) - 2, 0, this.Height); #region Draw Floors and Tiles CIGame.Instance.GraphicsDevice.SetRenderTarget(_worldTarget); CIGame.Instance.GraphicsDevice.Clear(Color.Black); CIGame.Instance.SpriteBatch.Begin(); //Draw floors for (int x = tileStartX; x < (int)MathHelper.Clamp(tileStartX + tileDrawWidth, 0, this.Width); x++) { for (int y = tileStartY; y < (int)MathHelper.Clamp(tileStartY + tileDrawHeight, 0, this.Height); y++) { //Check if this tile is hidden by layer above it bool visible = true; for (int i = this.LayerNumber; i <= _parent.ActiveLayer; i++) { if (this.LayerNumber != (_parent.Layers - 1) && (_parent.GetTileAt(x, y, i + 1).Opacity >= 1.0f || _parent.GetFloorAt(x, y, i + 1).Opacity >= 1.0f)) { visible = false; break; } } //Only draw if visible under the tile above it if (visible && this.GetTileAt(x, y).Opacity < 1.0f) { Texture2D tex = WorldTextureManager.GetFloorTexture((Floor)_floors[x, y]); Rectangle source = WorldTextureManager.GetSourceForIndex(((Floor)_floors[x, y]).GetTextureIndexFromSurroundings(x, y, this), tex); Rectangle draw = new Rectangle(startX + x * width, startY + y * width, width, width); CIGame.Instance.SpriteBatch.Draw(tex, draw, source, Color.White * ((Floor)_floors[x, y]).Opacity); drawAmt++; } } } //Draw tiles for (int x = tileStartX; x < (int)MathHelper.Clamp(tileStartX + tileDrawWidth, 0, this.Width); x++) { for (int y = tileStartY; y < (int)MathHelper.Clamp(tileStartY + tileDrawHeight, 0, this.Height); y++) { //Check if this tile is hidden by layers above it bool visible = true; for (int i = this.LayerNumber; i <= _parent.ActiveLayer; i++) { if (this.LayerNumber != (_parent.Layers - 1) && (_parent.GetTileAt(x, y, i + 1).Opacity >= 1.0f || _parent.GetFloorAt(x, y, i + 1).Opacity >= 1.0f)) { visible = false; break; } } if (visible) { Texture2D tex = WorldTextureManager.GetTileTexture((Tile)_tiles[x, y]); Rectangle source = WorldTextureManager.GetSourceForIndex(((Tile)_tiles[x, y]).GetTextureIndexFromSurroundings(x, y, this), tex); Rectangle draw = new Rectangle(startX + x * width, startY + y * width, width, width); CIGame.Instance.SpriteBatch.Draw(tex, draw, source, Color.White * ((Tile)_tiles[x, y]).Opacity); drawAmt++; } } } CIGame.Instance.SpriteBatch.End(); Console.WriteLine(drawAmt); CIGame.Instance.GraphicsDevice.SetRenderTarget(null); //TODO: Change to new rendertarget instead of null #endregion } So I was wondering if this is an efficient way, but I'm going about it wrongly, or if there is a different, more efficient way to check if the tiles are hidden. EDIT: For example of how much it affects performance: using a world with three layers, allowing everything to draw no matter what gives me 60FPS, but checking if its visible with all of the layers above it gives me only 20FPS, while checking only the layer immediately above it gives me a fluctuating FPS between 30 and 40FPS.

    Read the article

  • New customer references for Exadata-based projects

    - by Javier Puerta
    Milletech Systems, Inc. shows a large state university how to improve query response times 15-fold using its grant management solution built on Oracle’s Extreme Performance Infrastructure. Read More. Ação Informática helped Valdecard realize a 15-Fold Improvement in Fleet-Management and Benefit Card Data Processing using Oracle Exadata Machine. Read More. Neusoft deployed Benxi Municipal Human Resources and Social Security Bureau’s cloud-based database platform to process social insurance payments 50-times faster using Oracle Exadata Database Machine. Read More.

    Read the article

  • Microsoft dévoile la version CTP de Dryad et DryadLINQ pour le développement parallèle et distribué

    Microsoft dévoile la version CTP de Dryad et DryadLINQ Pour le développement parallèle et distribué Microsoft vient de publier la version CTP de ses environnements de calculs parallèles et distribués qui seront commercialisés dans les semaines à venir, Dryad et DryadLINQ. Dryad est un moteur de calcul haute performance pour des calculs distribués, conçu pour simplifier la mise en oeuvre d'applications distribuées. DryadLINQ, lui, permet aux développeurs d'implémenter des applications Dryad en code managé à l'aide d'une version étendue du modèle de programmation LINQ. A la base, la technologie Dryad était un projet de recherche de Microsoft pour l'exécution des donnée...

    Read the article

  • Wireless Very slow with 13.10 and BCM4313

    - by RyanCheu
    I have a laptop with the BCM4313, and it was working perfectly in Ubuntu 13.04, but I recently upgraded to 13.10 and now my wireless performance is horrible. Initially it didn't work at all, but I removed the wl driver and use the brcmsmac driver instead. Now when I boot up it works at the start, but gets progressively slower. My Android device is reporting 10Mbps down/20Mbps up, but my laptop only gets 1up/down. Does anyone know a solution? I really need my wireless to work, is my best option to just reinstall on 13.04? Thanks!

    Read the article

  • Does the D programming language have a future?

    - by user32756
    I stumbled several times over D and really asked myself why it isn't more popular. D is a systems programming language. Its focus is on combining the power and high performance of C and C++ with the programmer productivity of modern languages like Ruby and Python. Special attention is given to the needs of quality assurance, documentation, management, portability and reliability. Do you think it has got a future? I really would like to try it but somehow the thought that I'm the only person on earth programming D discourages me to try it.

    Read the article

  • Spezialisierung ohne Grenzen

    - by A&C Redaktion
    Arrow erreicht Exadata Spezialisierung für alle EMEA-Länder “Know-how sells” – das weiß auch unser VAD Arrow. Der IT-Distributor aus Fürstenfeldbruck, nahe München, hat sich auf die Bereitstellung von Enterprise und Midrange Computing Lösungen fokussiert. So auch für die Exadata Technologie von Oracle. Exadata beinhaltet Server, Speicher, Netzwerktechnik und Datenbanksoftware in einem System und hilft so, auch große Datenmengen – die „Big Data“ – spielend zu managen. Die Kombination aus Hard- und Software bietet Oracle Partnern enorme Geschäftspotenziale im Verkauf und im Service, deshalb ist eine Expertise so wichtig. Durch die vier europäischen Demo-Zentren und insgesamt acht komplett installierte Exadata reichlich Erfahrung mit der Oracle Exa-Familie sammeln können. Der VAD bietet Oracle Partnern und Kunden Performance-Tests, Testumgebungen und Proof of Concepts (PoC) an – und das länderübergreifend. Als logische Konsequenz wurde Arrow im August 2012 mit der EMEA Spezialisierung für Exadata von Oracle ausgezeichnet! Wir gratulieren ganz herzlich und wünschen viel Erfolg mit dem Exa-Stack!

    Read the article

  • Spezialisierung ohne Grenzen

    - by A&C Redaktion
    Arrow erreicht Exadata Spezialisierung für alle EMEA-Länder “Know-how sells” – das weiß auch unser VAD Arrow. Der IT-Distributor aus Fürstenfeldbruck, nahe München, hat sich auf die Bereitstellung von Enterprise und Midrange Computing Lösungen fokussiert. So auch für die Exadata Technologie von Oracle. Exadata beinhaltet Server, Speicher, Netzwerktechnik und Datenbanksoftware in einem System und hilft so, auch große Datenmengen – die „Big Data“ – spielend zu managen. Die Kombination aus Hard- und Software bietet Oracle Partnern enorme Geschäftspotenziale im Verkauf und im Service, deshalb ist eine Expertise so wichtig. Durch die vier europäischen Demo-Zentren und insgesamt acht komplett installierte Exadata reichlich Erfahrung mit der Oracle Exa-Familie sammeln können. Der VAD bietet Oracle Partnern und Kunden Performance-Tests, Testumgebungen und Proof of Concepts (PoC) an – und das länderübergreifend. Als logische Konsequenz wurde Arrow im August 2012 mit der EMEA Spezialisierung für Exadata von Oracle ausgezeichnet! Wir gratulieren ganz herzlich und wünschen viel Erfolg mit dem Exa-Stack!

    Read the article

  • Improving Shopfloor Data Collection with Oracle Manufacturing Operations Center

    Successful factories around the world leverage information to drive their production and supply chains. New tools are available today to further catapult the data collection, analysis, contextualization and collaboration to the various stakeholders involved in the manufacturing process. Oracle Manufacturing Operations Center (MOC) addresses the factory's need for accurate and timely information about product and process quality, insight into shop floor operations, and performance of production assets. It solves the complex problem of connecting fragmented disconnected shop floor data to the business context of your ERP and provides the solid foundation for running Continuous Improvement (CI) programs such as Lean and Six Sigma.

    Read the article

  • What Counts for A DBA - Logic

    - by drsql
    "There are 10 kinds of people in the world. Those who will always wonder why there are only two items in my list and those who will figured it out the first time they saw this very old joke."  Those readers who will give up immediately and get frustrated with me for not explaining it to them are not likely going to be great technical professionals of any sort, much less a programmer or administrator who will be constantly dealing with the common failures that make up a DBA's day.  Many of these people will stare at this like a dog staring at a traffic signal and still have no more idea of how to decipher the riddle. Without explanation they will give up, call the joke "stupid" and, feeling quite superior, walk away indignantly to their job likely flipping patties of meat-by-product. As a data professional or any programmer who has strayed  to this very data-oriented blog, you would, if you are worth your weight in air, either have recognized immediately what was going on, or felt a bit ignorant.  Your friends are chuckling over the joke, but why is it funny? Unfortunately you left your smartphone at home on the dresser because you were up late last night programming and were running late to work (again), so you will either have to fake a laugh or figure it out.  Digging through the joke, you figure out that the word "two" is the most important part, since initially the joke mentioned 10. Hmm, why did they spell out two, but not ten? Maybe 10 could be interpreted a different way?  As a DBA, this sort of logic comes into play every day, and sometimes it doesn't involve nerdy riddles or Star Wars folklore.  When you turn on your computer and get the dreaded blue screen of death, you don't immediately cry to the help desk and sit on your thumbs and whine about not being able to work. Do that and your co-workers will question your nerd-hood; I know I certainly would. You figure out the problem, and when you have it narrowed down, you call the help desk and tell them what the problem is, usually having to explain that yes, you did in fact try to reboot before calling.  Of course, sometimes humility does come in to play when you reach the end of your abilities, but the ‘end of abilities’ is not something any of us recognize readily. It is handy to have the ability to use logic to solve uncommon problems: It becomes especially useful when you are trying to solve a data-related problem such as a query performance issue, and the way that you approach things will tell your coworkers a great deal about your abilities.  The novice is likely to immediately take the approach of  trying to add more indexes or blaming the hardware. As you become more and more experienced, it becomes increasingly obvious that performance issues are a very complex topic. A query may be slow for a myriad of reasons, from concurrency issues, a poor query plan because of a parameter value (like parameter sniffing,) poor coding standards, or just because it is a complex query that is going to be slow sometimes. Some queries that you will deal with may have twenty joins and hundreds of search criteria, and it can take a lot of thought to determine what is going on.  You can usually figure out the problem to almost any query by using basic knowledge of how joins and queries work, together with the help of such things as the query plan, profiler or monitoring tools.  It is not unlikely that it can take a full day’s work to understand some queries, breaking them down into smaller queries to find a very tiny problem. Not every time will you actually find the problem, and it is part of the process to occasionally admit that the problem is random, and everything works fine now.  Sometimes, it is necessary to realize that a problem is outside of your current knowledge, and admit temporary defeat: You can, at least, narrow down the source of the problem by looking logically at all of the possible solutions. By doing this, you can satisfy your curiosity and learn more about what the actual problem was. For example, in the joke, had you never been exposed to the concept of binary numbers, there is no way you could have known that binary - 10 = decimal - 2, but you could have logically come to the conclusion that 10 must not mean ten in the context of the joke, and at that point you are that much closer to getting the joke and at least won't feel so ignorant.

    Read the article

  • Nokia at JavaOne

    - by Tori Wieldt
    Nokia has long been a key partner for Java Mobile, and they continue investing significantly in Java technologies. Developers can learn more about Nokia's popular Asha phone and developer platform at JavaOne. In addition to interesting technical material, all Nokia sessions will include giveaways (hint: be engaged and ask questions!). Don't miss these great sessions: CON4925 The Right Platform with the Right Technology for Huge Markets with Many Opportunities CON11253 In-App Purchasing for Java ME Apps BOF4747 Look Again: Java ME's New Horizons of User Experience, Service Model, and Internet Innovation BOF12804 Reach the Next Billion with Engaging Apps: Nokia Asha Full Touch for Java ME Developers CON6664 on Mobile Java, Asha, Full Touch, Maps APIs, LWUIT, new UI, new APIs and more CON6494 Extreme Mobile Java Performance Tuning, User Experience, and Architecture BOF6556 Mobile Java App Innovation in Nigeria

    Read the article

  • Radeon Open Source Drivers Configuration

    - by Andy Turfer
    How does one configure the Radeon Open Source drivers? I have just installed Ubuntu 12.10 and want to try the Open Source drivers instead of the proprietary AMD binaries. After the installation, the driver seems to be installed, I have wobbly windows working (can't use a PC without wobbly windows!), and life is generally good. I have a problem when I connect a secondary monitor. Performance is killed (everything becomes laggy and jerky) and my laptop sits on the right-hand side of the monitor, not the left. I'd like to know how to turn off the Laptop's monitor so I'm just using the external monitor. How can I do this using the Open Source Radeon drivers? I can't find a GUI management tool, and there's no longer an xorg.conf. What to do?

    Read the article

  • Updated copy of the OBIEE Tuning whitepaper

    - by inowodwo
    The Product Assurance team have released an updated copy of the OBIEE Tuning Whitepaper. You can find it on the PA blog https://blogs.oracle.com/pa/entry/test or via Support note OBIEE 11g Infrastructure Performance Tuning Guide (Doc ID 1333049.1) https://support.us.oracle.com/oip/faces/secure/km/DocumentDisplay.jspx?id=1333049.1&recomm=Y This new revised document contains following useful tuning items: 1.    New improved HTTP Server caching algorithm. 2.    Oracle iPlanet Web Server tuning parameters. 3.    New tuning parameters settings / values for OPIS/OBIS components.

    Read the article

  • Data base preference for network based C# windows application [on hold]

    - by Sinoop Joy
    I'm planning to develop a C# widows based application for an academy. The academy will have different instances of application running in different machines. The database should have shared access. All the application instances can do update, delete or insert. I've not done any network based application. Anybody can give any useful link to where to start with ? Which database would give max performance with all required features i said for this scenario ?

    Read the article

  • Enhancing Enterprise Planning and Forecasting Through Predictive Modeling

    Planning and forecasting performance in today's volatile economic environment can be challenging with traditional planning applications and manual modeling techniques. To address these challenges, leading edge companies are leveraging predictive modeling to bring statistical analysis and techniques such as Monte Carlo simulations into the mix. Sound too math-intense and complicated? Not anymore. These techniques can be applied by anyone - no prior stats experience required - whether to augment the forecasting performed by line managers or to validate those forecasts based on historical information, and to produce a broader range of scenarios to consider in decision-making.

    Read the article

  • If you want to learn all about Exalogic in 6 minutes, watch this demo!

    - by Michael Palmeter (Exalogic PM)
    If you haven't seen the latest Exalogic demo, click here now. Our excellent marketing organization has recently produced a new 6-minute flash demo that describes the Exalogic Infrastructure-as-a-Service management UI.  After years of investment in this product we are now in the final stages of delivering on the complete private-cloud-in-a-box vision that Larry Ellison announced back at Oracle OpenWorld 2010.  This demo video (flash) does the best job yet of explaining what is so great about Exalogic and why it is going to drive transformation of our industry.  If you haven't seen it yet, take a look.  There's much more to Exalogic now than just blazing performance.

    Read the article

  • Learning PostgreSql: Embracing Change With Copying Types and VARCHAR(NO_SIZE_NEEDED)

    - by Alexander Kuznetsov
    PostgreSql 9.3 allows us to declare parameter types to match column types, aka Copying Types. Also it allows us to omit the length of VARCHAR fields, without any performance penalty. These two features make PostgreSql a great back end for agile development, because they make PL/PgSql more resilient to changes. Both features are not in SQL Server 2008 R2. I am not sure about later releases of SQL Server. Let us discuss them in more detail and see why they are so useful. Using Copying Types Suppose...(read more)

    Read the article

  • does class reference itself static anti pattern in prism

    - by Michael Riva
    I have an application and my desing approach look like this: class Manager { public int State; static Manager _instance = null; public static Manager Instance { get { return _instance; } set { if (_instance == value) return; _instance = value; } } public Manager() { State = 0; Instance=this; } } class Module1 { public void GetState() { Console.WriteLine(Manager.Instance.State); } } class Module2 { public void GetState() { Console.WriteLine(Manager.Instance.State); } } class Module3 { public void GetState() { Console.WriteLine(Manager.Instance.State); } } Manager class already registered in Bootstrapper like : protected override void ConfigureContainer() { base.ConfigureContainer(); Container.RegisterType<Manager>(new ContainerControlledLifetimeManager()); } protected override void InitializeModules() { Manager man= Container.Resolve<Manager>(); } Question is do I need to define my manager object as static in its field to be able to reach its state? Or this is anti pattern or bad for performance?

    Read the article

  • Do you use ReSharper full time, or only enable it when needed?

    - by gorohoroh
    Based on a multitude of questions related to temporarily disabling ReSharper, and also on certain research data, I can see that a considerable share of ReSharper users have it disabled most of the time. They tend to enable it for a limited period of time (say, several hours), do whatever they need to do using its functionality, and disable it back until the next time they feel they need to use it. If you're using ReSharper (or other similar VS extensions, to that matter) in such occasional manner, can you clarify why you're doing this? Is your behavior based on performance, or other considerations? What kinds of tasks do you enable ReSharper for in this scenario?

    Read the article

  • Getting Started with Oracle Fusion Financials

    Designed from the ground-up using the latest technology advances and incorporating the best practices gathered from Oracle's thousands of customers, Fusion Applications are 100 percent open standards-based business applications that set a new standard for the way we innovate, work and adopt technology. Delivered as a complete suite of modular applications, Fusion Applications work with your existing portfolio to evolve your business to a new level of performance. In this AppCast, part of a special series on Fusion Applications, you hear about the unique advantages of Fusion Financials, learn about the scope of the first release and discover how Fusion Financials modules can be used to complement and enhance your existing finance solutions.

    Read the article

  • How do you configure mupen64plus controls?

    - by user99426
    I installed mupen64plus from the repositories using Synaptic. I like the emulator (for the most part, a couple of graphics glitches on TLOZ Ocarina of Time), especially its performance on my old machine, but I cannot figure out how to configure the controls for myself. I tried looking at Google Code's guide here but I can't find the file I need to edit and the link with the key ids isn't working, so even if I could find the file I wouldn't be able to change anything. So what I need is a resource with the key ids and where to find the file I need to edit. I am running Ubuntu 12.10 32-bit. 2GB RAM, Intel CORE 2 DUO @ 2.00GHz

    Read the article

  • Why is not there a python compiler to native machine's code?

    - by user2986898
    As I understand, the cause of the speed difference between compiled languages and python is, that the first compiles code all way to the native machine's code, whereas python compiles to python bytecode, to be interpreted by the PVM. I see that this way python codes can be used on multiple operation system (at least in most cases), however I do not understand, why is not there an additional (and optional) compiler for python, which compiles the same way as traditional compilers. This would leave to the programmer to chose, which is more important to them; multiplatform executability or performance on native machine. In general; why are not there any languages which could be behave both as compiled and interpreted?

    Read the article

  • Implementing a Custom Coherence PartitionAssignmentStrategy

    - by jpurdy
    A recent A-Team engagement required the development of a custom PartitionAssignmentStrategy (PAS). By way of background, a PAS is an implementation of a Java interface that controls how a Coherence partitioned cache service assigns partitions (primary and backup copies) across the available set of storage-enabled members. While seemingly straightforward, this is actually a very difficult problem to solve. Traditionally, Coherence used a distributed algorithm spread across the cache servers (and as of Coherence 3.7, this is still the default implementation). With the introduction of the PAS interface, the model of operation was changed so that the logic would run solely in the cache service senior member. Obviously, this makes the development of a custom PAS vastly less complex, and in practice does not introduce a significant single point of failure/bottleneck. Note that Coherence ships with a default PAS implementation but it is not used by default. Further, custom PAS implementations are uncommon (this engagement was the first custom implementation that we know of). The particular implementation mentioned above also faced challenges related to managing multiple backup copies but that won't be discussed here. There were a few challenges that arose during design and implementation: Naive algorithms had an unreasonable upper bound of computational cost. There was significant complexity associated with configurations where the member count varied significantly between physical machines. Most of the complexity of a PAS is related to rebalancing, not initial assignment (which is usually fairly simple). A custom PAS may need to solve several problems simultaneously, such as: Ensuring that each member has a similar number of primary and backup partitions (e.g. each member has the same number of primary and backup partitions) Ensuring that each member carries similar responsibility (e.g. the most heavily loaded member has no more than one partition more than the least loaded). Ensuring that each partition is on the same member as a corresponding local resource (e.g. for applications that use partitioning across message queues, to ensure that each partition is collocated with its corresponding message queue). Ensuring that a given member holds no more than a given number of partitions (e.g. no member has more than 10 partitions) Ensuring that backups are placed far enough away from the primaries (e.g. on a different physical machine or a different blade enclosure) Achieving the above goals while ensuring that partition movement is minimized. These objectives can be even more complicated when the topology of the cluster is irregular. For example, if multiple cluster members may exist on each physical machine, then clearly the possibility exists that at certain points (e.g. following a member failure), the number of members on each machine may vary, in certain cases significantly so. Consider the case where there are three physical machines, with 3, 3 and 9 members each (respectively). This introduces complexity since the backups for the 9 members on the the largest machine must be spread across the other 6 members (to ensure placement on different physical machines), preventing an even distribution. For any given problem like this, there are usually reasonable compromises available, but the key point is that objectives may conflict under extreme (but not at all unlikely) circumstances. The most obvious general purpose partition assignment algorithm (possibly the only general purpose one) is to define a scoring function for a given mapping of partitions to members, and then apply that function to each possible permutation, selecting the most optimal permutation. This would result in N! (factorial) evaluations of the scoring function. This is clearly impractical for all but the smallest values of N (e.g. a partition count in the single digits). It's difficult to prove that more efficient general purpose algorithms don't exist, but the key take away from this is that algorithms will tend to either have exorbitant worst case performance or may fail to find optimal solutions (or both) -- it is very important to be able to show that worst case performance is acceptable. This quickly leads to the conclusion that the problem must be further constrained, perhaps by limiting functionality or by using domain-specific optimizations. Unfortunately, it can be very difficult to design these more focused algorithms. In the specific case mentioned, we constrained the solution space to very small clusters (in terms of machine count) with small partition counts and supported exactly two backup copies, and accepted the fact that partition movement could potentially be significant (preferring to solve that issue through brute force). We then used the out-of-the-box PAS implementation as a fallback, delegating to it for configurations that were not supported by our algorithm. Our experience was that the PAS interface is quite usable, but there are intrinsic challenges to designing PAS implementations that should be very carefully evaluated before committing to that approach.

    Read the article

< Previous Page | 641 642 643 644 645 646 647 648 649 650 651 652  | Next Page >